From da48dee3269cfeac158ea2ff6ef537635398255d Mon Sep 17 00:00:00 2001 From: Tom Tourwe Date: Wed, 4 Nov 2026 16:59:49 +0100 Subject: [PATCH 1/2] run A: structure.optimizeImports(["**"], shortenQualifiedNames=False) --- .../maddi/aapi/parser/AnalysisHints.java | 6 +- .../aapi/parser/AnalysisHintsCompiler.java | 23 ++++--- .../aapi/parser/AnalysisHintsComposer.java | 25 +++---- .../aapi/parser/AnalysisHintsParser.java | 21 +++--- .../aapi/parser/AnalysisHintsWriter.java | 17 ++--- .../maddi/aapi/parser/CompilerVisitor.java | 6 +- .../aapi/parser/DecoratorWithComments.java | 16 ++--- .../maddi/aapi/parser/CommonTest.java | 37 +++++----- .../aapi/parser/CompileAnalysisHints.java | 25 +++---- .../aapi/parser/ComposeAnalysisHints.java | 17 ++--- .../parser/TestAnalysisHintsCompiler.java | 15 ++-- .../parser/TestAnalysisHintsComposer.java | 37 +++++----- .../aapi/parser/TestAnalysisHintsParser.java | 23 ++++--- .../TestAnalysisHintsParserOverloads.java | 15 ++-- .../aapi/parser/TestAssumedDefaults.java | 21 +++--- .../parser/TestComposeAnalysisHintsScope.java | 9 +-- .../aapi/parser/TestParseAnalyzeWrite.java | 46 +++++++------ .../aapi/parser/archive/TestJavaAwt.java | 17 ++--- .../maddi/aapi/parser/archive/TestJavaIo.java | 19 +++--- .../aapi/parser/archive/TestJavaLang.java | 23 ++++--- .../archive/TestJavaLangAnnotation.java | 23 ++++--- .../parser/archive/TestJavaLangConstant.java | 15 ++-- .../parser/archive/TestJavaLangReflect.java | 13 ++-- .../aapi/parser/archive/TestJavaMath.java | 15 ++-- .../aapi/parser/archive/TestJavaNet.java | 19 +++--- .../aapi/parser/archive/TestJavaNetHttp.java | 23 ++++--- .../parser/archive/TestJavaNioCharset.java | 13 ++-- .../aapi/parser/archive/TestJavaNioFile.java | 11 +-- .../aapi/parser/archive/TestJavaSecurity.java | 21 +++--- .../aapi/parser/archive/TestJavaTime.java | 41 +++++------ .../parser/archive/TestJavaTimeFormat.java | 27 ++++---- .../aapi/parser/archive/TestJavaUtil.java | 27 ++++---- .../archive/TestJavaUtilConcurrent.java | 31 +++++---- .../archive/TestJavaUtilConcurrentAtomic.java | 21 +++--- .../parser/archive/TestJavaUtilFunction.java | 21 +++--- .../parser/archive/TestJavaUtilLogging.java | 11 +-- .../parser/archive/TestJavaUtilRandom.java | 14 ++-- .../parser/archive/TestJavaUtilRegex.java | 17 ++--- .../parser/archive/TestJavaUtilStream.java | 27 ++++---- .../aapi/parser/archive/TestJavaUtilZip.java | 11 +-- .../aapi/parser/archive/TestJavaxSwing.java | 15 ++-- .../parser/archive/TestJavaxSwingTable.java | 13 ++-- .../parser/archive/TestJavaxSwingText.java | 11 +-- .../aapi/parser/example/jdk/JavaLang.java | 4 +- .../analyzer/AbstractMethodAnalyzer.java | 4 +- .../analyzer/AnalysisProgressFeed.java | 12 ++-- .../analyzer/CheckpointWriter.java | 22 +++--- .../analyzer/CompositeValueFeed.java | 8 +-- .../modification/analyzer/FieldAnalyzer.java | 3 - .../modification/analyzer/GuardAnalyzer.java | 4 +- .../analyzer/IteratingAnalyzer.java | 8 +-- .../analyzer/SingleIterationAnalyzer.java | 4 +- .../analyzer/TypeContainerAnalyzer.java | 3 - .../analyzer/TypeImmutableAnalyzer.java | 4 +- .../analyzer/TypeModIndyAnalyzer.java | 4 -- .../impl/AbstractMethodAnalyzerImpl.java | 30 ++++---- .../analyzer/impl/AnalysisBudget.java | 4 +- .../analyzer/impl/CommonAnalyzerImpl.java | 9 +-- .../analyzer/impl/ContractResolution.java | 6 +- .../analyzer/impl/DependentCulprit.java | 6 +- .../impl/DynamicImmutabilityInference.java | 10 +-- .../analyzer/impl/ElementSummary.java | 8 +-- .../analyzer/impl/EventualCluster.java | 19 +++--- .../impl/EventualClusterContraction.java | 15 ++-- .../analyzer/impl/FieldAnalyzerImpl.java | 47 ++++++------- .../analyzer/impl/GuardAnalyzerImpl.java | 49 +++++++------ .../analyzer/impl/IteratingAnalyzerImpl.java | 25 +++---- .../analyzer/impl/LinkToField.java | 12 ++-- .../analyzer/impl/ModAnalyzerForTesting.java | 5 +- .../impl/SingleIterationAnalyzerImpl.java | 51 +++++++------- .../impl/SourceContractMaterializer.java | 22 +++--- .../impl/StaticSideEffectAnalyzerImpl.java | 22 +++--- .../impl/TypeContainerAnalyzerImpl.java | 17 +++-- .../analyzer/impl/TypeCulprit.java | 15 ++-- .../impl/TypeEventualAnalyzerImpl.java | 64 ++++++++--------- .../impl/TypeImmutableAnalyzerImpl.java | 32 ++++----- .../impl/TypeIndependentAnalyzerImpl.java | 48 ++++++------- .../impl/TypeModIndyAnalyzerImpl.java | 46 ++++++------- .../nullability/AnnotationPresence.java | 8 +-- .../analyzer/nullability/CallResults.java | 26 +++---- .../analyzer/nullability/Contracts.java | 24 +++---- .../analyzer/nullability/GraphCompletion.java | 20 +++--- .../analyzer/nullability/Index.java | 20 +++--- .../analyzer/nullability/KeyPresence.java | 8 +-- .../analyzer/nullability/MethodWalker.java | 18 ++--- .../analyzer/nullability/NarrowedReads.java | 8 +-- .../analyzer/nullability/Narrowing.java | 8 +-- .../analyzer/nullability/Nodes.java | 18 ++--- .../analyzer/nullability/NonNullFacts.java | 20 +++--- .../analyzer/nullability/NullGraph.java | 34 +++++----- .../analyzer/nullability/NullPredicates.java | 10 +-- .../nullability/NullabilityComparison.java | 6 +- .../analyzer/nullability/NullabilityPass.java | 24 +++---- .../analyzer/nullability/OutsideCallers.java | 8 +-- .../analyzer/nullability/Preconditions.java | 20 +++--- .../analyzer/nullability/PureCall.java | 8 +-- .../analyzer/nullability/ReadNarrowing.java | 18 ++--- .../analyzer/nullability/Report.java | 10 +-- .../analyzer/nullability/Seeds.java | 22 +++--- .../analyzer/nullability/Tolerance.java | 20 +++--- .../analyzer/nullability/Trace.java | 6 +- .../analyzer/nullability/TypeUses.java | 18 ++--- .../analyzer/nullability/Types.java | 17 ++--- .../analyzer/nullability/Verdicts.java | 18 ++--- .../shadow/ShadowModificationPass.java | 47 ++++++------- .../modification/analyzer/CommonTest.java | 39 +++++------ .../analyzer/TestAnalysisProgressFeed.java | 12 ++-- .../analyzer/TestNoUndecidedAtEnd.java | 19 +++--- .../clonebench/TestArrayVariable.java | 23 ++++--- .../clonebench/TestCastCharToInt.java | 11 +-- .../analyzer/clonebench/TestCloneBench.java | 47 ++++++------- .../analyzer/clonebench/TestConsumer.java | 9 +-- .../analyzer/clonebench/TestEmptyBlock.java | 9 +-- .../clonebench/TestGiantSwitchRepro.java | 13 ++-- .../clonebench/TestHCSConstructor.java | 9 +-- .../clonebench/TestHCTNotYetLoaded.java | 13 ++-- .../clonebench/TestMessageDigestUpdate.java | 9 +-- .../TestNeedMethodReturnTypeInHCT.java | 31 +++++---- .../clonebench/TestNullInHCSFindAll.java | 9 +-- .../clonebench/TestTypeParameterChoices.java | 13 ++-- .../analyzer/clonebench/TestVarargs.java | 9 +-- .../analyzer/clonebench/TestVarious.java | 24 +++---- .../analyzer/clonebench/TestVarious2.java | 9 +-- .../TestVariousDependentVariableIssues.java | 9 +-- .../TestWarnForWrongIndependentHC.java | 9 +-- .../analyzer/eventual/TestCommitLabels.java | 19 +++--- .../TestDynamicImmutabilityInference.java | 17 ++--- .../eventual/TestDynamicImmutableReturn.java | 19 +++--- .../TestEventualClusterAssumptions.java | 17 ++--- .../TestEventualClusterContraction.java | 9 +-- .../eventual/TestEventualDominance.java | 19 +++--- .../eventual/TestEventualNeedsAMark.java | 15 ++-- .../eventual/TestEventualPropagation.java | 19 +++--- .../TestEventualProtectedCarrier.java | 19 +++--- .../eventual/TestEventualSharedContent.java | 17 ++--- .../TestEventuallyUnmodifiedParameter.java | 21 +++--- .../eventual/TestRootAccessorCommitment.java | 17 ++--- .../faulttolerance/TestFaultIsolation.java | 27 ++++---- .../field/TestFieldAnalyzerDegraded.java | 25 +++---- .../TestFieldAnalyzerFieldOfCallResult.java | 26 +++---- .../field/TestFieldAnalyzerFinalField.java | 21 +++--- .../field/TestFieldAnalyzerParameterPart.java | 23 ++++--- .../TestFieldAnalyzerReadInCondition.java | 23 ++++--- ...estContainerContractUnderReachability.java | 13 ++-- .../guard/TestContractOnAbstractMethod.java | 21 +++--- .../TestContractOnAbstractParameter.java | 19 +++--- .../analyzer/guard/TestGuardContainer.java | 23 ++++--- .../guard/TestGuardDynamicImmutable.java | 25 +++---- .../analyzer/guard/TestGuardHierarchy.java | 23 ++++--- .../guard/TestGuardIgnoreModifications.java | 23 ++++--- .../analyzer/guard/TestGuardImmutable.java | 23 ++++--- .../analyzer/guard/TestGuardIndependent.java | 23 ++++--- .../guard/TestGuardIndependentType.java | 23 ++++--- .../analyzer/guard/TestNearMissContainer.java | 23 ++++--- .../analyzer/guard/TestNearMissMethod.java | 23 ++++--- .../analyzer/guard/TestNearMissType.java | 23 ++++--- .../integration/TestAnalysisTimeBudget.java | 23 ++++--- .../integration/TestAnalysisValueFeed.java | 19 +++--- .../TestBookIndependenceOfSupportTypes.java | 25 +++---- .../integration/TestCheckpointResume.java | 31 +++++---- .../TestClearBeforeRecomputeHook.java | 25 +++---- .../analyzer/integration/TestExposedView.java | 17 ++--- .../TestExtensibleHiddenContent.java | 19 +++--- .../analyzer/integration/TestImmutable.java | 24 +++---- .../TestIndependentOfByteArray.java | 33 ++++----- .../integration/TestIndependentOfEnum.java | 23 ++++--- .../integration/TestIntegration1.java | 9 +-- .../integration/TestIntegration2.java | 9 +-- .../integration/TestIntegration3.java | 19 +++--- .../TestLazyShapeIndependence.java | 13 ++-- .../TestLinkConstructorInMethodCall.java | 37 +++++----- .../TestSeededIncrementalAnalysis.java | 25 +++---- .../integration/TestTypeNullBreaking.java | 21 +++--- .../io/TestWriteAnalysisSyntheticFields.java | 37 +++++----- .../io/TestWriteAnalysisUnnamedPackage.java | 33 ++++----- .../kotlin/CommonKotlinAnalyzerTest.java | 27 ++++---- .../kotlin/TestKotlinAnalyzerCollections.java | 7 +- .../TestKotlinAnalyzerConstruction.java | 4 +- .../kotlin/TestKotlinAnalyzerControl.java | 4 +- .../kotlin/TestKotlinAnalyzerEnumEntries.java | 11 +-- .../kotlin/TestKotlinAnalyzerMethods.java | 9 +-- .../kotlin/TestKotlinAnalyzerSuspend.java | 8 +-- .../kotlin/TestKotlinAnalyzerSynthesized.java | 8 +-- .../kotlin/TestKotlinAnalyzerTypes.java | 4 +- .../analyzer/link/TestLinkFacts.java | 23 ++++--- .../analyzer/method/TestDelegatingUnion.java | 15 ++-- .../analyzer/method/TestFluent.java | 33 ++++----- .../analyzer/method/TestIdentity.java | 33 ++++----- .../analyzer/method/TestLambda.java | 26 +++---- .../modification/TestBreakVariable.java | 11 ++- .../modification/TestBridgeLinkDrop.java | 19 +++--- .../TestBuilderFieldAssignment.java | 15 ++-- .../modification/TestCapturedDelegate.java | 17 ++--- .../analyzer/modification/TestCast.java | 39 +++++------ .../TestCopyConstructorIndependence.java | 15 ++-- .../modification/TestDeepCaptureChain.java | 15 ++-- .../TestDelegatingImplementation.java | 15 ++-- .../modification/TestDependentCulprit.java | 19 +++--- .../modification/TestElementFlowWidening.java | 15 ++-- .../TestGenericCarrierImmutability.java | 21 +++--- .../TestHiddenContentToModifiedArgument.java | 17 ++--- .../TestIgnoreModificationsOnArgument.java | 17 ++--- ...oreModificationsOnFunctionalParameter.java | 17 ++--- ...tIndependenceNotWrittenWhileUndecided.java | 17 ++--- .../TestIndependenceThroughHierarchy.java | 17 ++--- .../modification/TestIndependentMapField.java | 17 ++--- .../TestIndependentNonPrivateField.java | 19 +++--- .../TestInheritedFieldHiddenContent.java | 17 ++--- .../analyzer/modification/TestInstanceOf.java | 31 +++++---- .../modification/TestJacksonCommonsIo.java | 15 ++-- .../modification/TestLoggerModification.java | 13 ++-- .../TestLoopTransformDivergence.java | 15 ++-- .../TestMapValueModification.java | 15 ++-- .../modification/TestMockitoVerify.java | 15 ++-- .../modification/TestModificationBasics.java | 21 +++--- .../modification/TestModificationField.java | 37 +++++----- .../TestModificationFunctional.java | 23 ++++--- .../TestModificationFunctionalE7.java | 17 ++--- ...stModificationInConditionalExpression.java | 13 ++-- ...tModificationInConditionalExpression2.java | 14 ++-- .../TestModificationLoopTransform.java | 41 +++++------ .../modification/TestModificationMethod.java | 24 +++---- ...icationOfElementThroughPassedFunction.java | 21 +++--- .../TestModificationOuterThis.java | 15 ++-- .../TestModificationParameter.java | 27 ++++---- .../TestModificationThroughCallResult.java | 15 ++-- ...TestModificationThroughPassedFunction.java | 23 ++++--- .../TestModificationThroughView.java | 15 ++-- .../modification/TestModifiedCulprit.java | 19 +++--- .../TestNestedElementModification.java | 15 ++-- .../modification/TestNullableCulprit.java | 20 +++--- .../modification/TestObjectReturnDefault.java | 21 +++--- .../TestOptimisticModificationShapes.java | 17 ++--- .../TestReceiverChainThroughLibrary.java | 15 ++-- .../modification/TestReceiverLevel.java | 17 ++--- .../TestRecursionThroughAbstract.java | 11 +-- .../TestRecursiveCycleReadOnly.java | 15 ++-- .../modification/TestRecursiveReadOnly.java | 17 ++--- .../TestRecursiveReadOnlyParameter.java | 13 ++-- .../TestRespelledFieldParameter.java | 13 ++-- .../TestSetterArgumentNotModified.java | 19 +++--- .../TestSiblingCapsThroughHierarchy.java | 17 ++--- .../TestSourceMethodContracts.java | 15 ++-- .../modification/TestStaticAndSelfFields.java | 17 ++--- .../modification/TestStaticSideEffects.java | 23 ++++--- .../TestStructuralModification.java | 15 ++-- .../TestStructuralModificationContract.java | 21 +++--- .../TestSubtypeWaitsForAbstractSupertype.java | 17 ++--- ...TestSwitchExpressionBlockModification.java | 15 ++-- .../modification/TestTypeCulprit.java | 21 +++--- .../modification/TestUnmodifiableView.java | 17 ++--- .../TestUnmodifiableViewIndependence.java | 15 ++-- .../modification/TestViewLocalCycle.java | 13 ++-- .../modification/TestViewMethods.java | 13 ++-- .../TestVisitPredicateDisclaimer.java | 11 +-- .../analyzer/nolink/TestContainer.java | 17 ++--- .../nolink/TestDefaultMethodModification.java | 13 ++-- .../analyzer/nolink/TestEnum.java | 21 +++--- .../nolink/TestFieldModification.java | 15 ++-- .../analyzer/nolink/TestFinalFields.java | 17 ++--- .../nolink/TestImmutableHiddenContent.java | 21 +++--- .../nolink/TestImmutableViaModification.java | 19 +++--- .../analyzer/nolink/TestIndependent.java | 23 ++++--- .../nolink/TestInterfaceImmutable.java | 15 ++-- .../analyzer/nolink/TestIteration.java | 19 +++--- .../nolink/TestMethodModification.java | 15 ++-- .../nolink/TestModificationContext.java | 15 ++-- .../nolink/TestModificationIndirect.java | 13 ++-- .../nolink/TestParameterModification.java | 17 ++--- .../nullability/NullabilityFixtures.java | 11 +-- .../analyzer/nullability/TestCallResults.java | 12 ++-- .../analyzer/nullability/TestContracts.java | 19 +++--- .../nullability/TestMethodWalker.java | 27 ++++---- .../analyzer/nullability/TestNullGraph.java | 17 ++--- .../TestNullabilityAnnotations.java | 15 ++-- .../nullability/TestOutsideCallers.java | 4 +- .../nullability/TestPreconditions.java | 21 +++--- .../nullability/TestReadNarrowing.java | 15 ++-- .../analyzer/nullability/TestSeeds.java | 23 ++++--- .../analyzer/nullability/TestSwitches.java | 6 +- .../analyzer/nullability/TestTolerance.java | 10 +-- .../nullability/TestTolerantSlots.java | 13 ++-- .../analyzer/nullability/TestVerdicts.java | 11 +-- .../rewire/TestAnalysisFingerprint.java | 25 +++---- .../rewire/TestClearBeforeRecompute.java | 9 +-- .../analyzer/rewire/TestDerivedRewire.java | 31 +++++---- .../shadow/TestReachabilityOnClosure.java | 18 ++--- .../analyzer/shadow/TestShadowCloneBench.java | 42 ++++++------ .../shadow/TestShadowHiddenContentFace.java | 11 +-- .../shadow/TestShadowModificationPass.java | 19 +++--- .../TestStaticValuesAssignment.java | 22 +++--- .../modification/common/AnalysisHelper.java | 12 ++-- .../common/defaults/AnnotationProvider.java | 4 +- .../common/defaults/AnnotationToProperty.java | 21 +++--- .../common/defaults/ContractReader.java | 4 +- .../common/defaults/DebugVisitor.java | 6 +- .../common/defaults/ShallowAnalyzer.java | 14 ++-- .../defaults/ShallowMethodAnalyzer.java | 30 ++++---- .../common/defaults/ShallowTypeAnalyzer.java | 39 +++++------ .../common/getset/ApplyGetSetTranslation.java | 4 +- .../common/getset/GetSetHelper.java | 4 +- .../common/util/ConstructedReturn.java | 18 ++--- .../modification/common/util/Culprits.java | 6 +- .../common/util/IsolateClass.java | 27 ++++---- .../common/util/IsolateMethod.java | 17 ++--- .../common/util/IsolationCore.java | 22 +++--- .../common/util/ProgramHierarchy.java | 8 +-- .../common/CommonIsolateMethodTest.java | 19 +++--- .../common/TestIsolateClass1.java | 27 ++++---- .../common/TestIsolateClass2.java | 27 ++++---- .../TestIsolateClass3SelfReference.java | 27 ++++---- .../common/TestIsolateClass4Compiles.java | 27 ++++---- .../common/TestIsolateClass5Group.java | 29 ++++---- .../TestIsolateClass6FreshFactories.java | 37 +++++----- .../TestIsolateClass7InheritedMembers.java | 35 +++++----- .../common/TestIsolateClass8Natures.java | 29 ++++---- .../common/TestIsolateMethod1.java | 9 +-- .../TestIsolateMethod10FullyQualified.java | 13 ++-- .../TestIsolateMethod11Annotations.java | 7 +- .../common/TestIsolateMethod12Override.java | 7 +- .../TestIsolateMethod13OverrideQualified.java | 5 +- .../common/TestIsolateMethod14Hierarchy.java | 7 +- .../TestIsolateMethod15FieldPositions.java | 9 +-- ...estIsolateMethod16NamespaceReferences.java | 17 ++--- .../TestIsolateMethod17ImportCollision.java | 21 +++--- .../TestIsolateMethod2TypeParameters.java | 9 +-- .../TestIsolateMethod3TypeParameters.java | 7 +- ...estIsolateMethod4SimpleNameCollisions.java | 7 +- .../TestIsolateMethod5MethodReferences.java | 7 +- .../common/TestIsolateMethod6FieldAccess.java | 7 +- .../common/TestIsolateMethod7Exceptions.java | 9 +-- ...solateMethod8LambdasAndAnonymousTypes.java | 7 +- .../common/TestIsolateMethod9Imports.java | 13 ++-- .../common/TestIsolateMethodCodec.java | 19 +++--- .../TestSiblingQualifiedNestedReference.java | 9 +-- .../common/TestTypeBoundWildcardPrinting.java | 7 +- .../defaults/TestEventualContracts.java | 19 +++--- .../defaults/TestInheritedNullability.java | 21 +++--- .../modification/common/CloneBenchCorpus.java | 4 +- .../maddi/modification/common/CommonTest.java | 23 ++++--- .../maddi/modification/link/LinkComputer.java | 8 +-- .../link/impl/AssignLinksToLocal.java | 4 +- .../link/impl/ExpressionVisitor.java | 47 +++++++------ .../maddi/modification/link/impl/ForEach.java | 10 +-- .../impl/LinkAppliedFunctionalInterface.java | 24 +++---- .../link/impl/LinkComputerImpl.java | 68 +++++++++---------- .../link/impl/LinkComputerRecursion.java | 2 +- .../modification/link/impl/LinkFactsImpl.java | 12 ++-- .../link/impl/LinkFunctionalInterface.java | 39 +++++------ .../link/impl/LinkMethodCall.java | 46 ++++++------- .../link/impl/LinkNatureImpl.java | 7 +- .../link/impl/LinkedVariablesImpl.java | 13 ++-- .../link/impl/MethodLinkedVariablesImpl.java | 28 ++++---- .../link/impl/MethodModification.java | 29 ++++---- .../link/impl/PassedFunction.java | 10 +-- .../modification/link/impl/ReceiverLevel.java | 15 ++-- .../link/impl/RecursionPrevention.java | 9 +-- .../maddi/modification/link/impl/Result.java | 17 ++--- .../link/impl/ShallowMethodLinkComputer.java | 43 ++++++------ .../modification/link/impl/SliceFactory.java | 3 +- .../link/impl/WriteLinksAndModification.java | 45 ++++++------ .../modification/link/impl/graph/Fact.java | 4 +- .../impl/graph/IncrementalFixpointEngine.java | 9 +-- .../modification/link/impl/graph/Witness.java | 4 +- .../link/impl/linkgraph/Edge.java | 5 +- .../link/impl/linkgraph/ExpandSlice.java | 16 ++--- .../link/impl/linkgraph/FollowGraph.java | 18 ++--- .../link/impl/linkgraph/Graph.java | 32 ++++----- .../link/impl/linkgraph/LinkGraph.java | 38 +++++------ .../link/impl/linkgraph/MakeGraph.java | 25 +++---- .../link/impl/linkgraph/RedundantLinks.java | 10 +-- .../link/impl/linkgraph/SharedVariables.java | 24 +++---- .../VirtualModificationIdenticals.java | 12 ++-- .../AppliedFunctionalInterfaceVariable.java | 8 +-- .../localvar/FunctionalInterfaceVariable.java | 4 +- .../impl/localvar/IntermediateVariable.java | 2 +- .../link/impl/localvar/MarkerVariable.java | 2 +- .../link/impl/localvar/SharedVariable.java | 12 ++-- .../impl/translate/TranslateConstants.java | 6 +- .../VariableTranslationAllowHierarchy.java | 6 +- .../translate/VariableTranslationMap.java | 12 ++-- ...ieldTranslationMapForMethodParameters.java | 12 ++-- .../maddi/modification/link/io/LinkCodec.java | 47 ++++++------- .../link/vf/VirtualFieldComputer.java | 28 ++++---- .../vf/VirtualFieldTranslationMapImpl.java | 32 ++++----- .../maddi/modification/link/CommonTest.java | 29 ++++---- .../link/impl/TestAdapterChainGrowth.java | 13 ++-- .../link/impl/TestAlternativeSources.java | 31 +++++---- .../TestAnonymousMemberRecordOpenJdk.java | 13 ++-- .../impl/TestAppliedFunctionalInterface.java | 17 ++--- .../link/impl/TestArrayInitializer.java | 15 ++-- .../link/impl/TestBareBlockStatement.java | 13 ++-- .../link/impl/TestBoundTypeParameter.java | 25 +++---- .../impl/TestBranchReadsEvaluationStage.java | 9 +-- .../impl/TestCallResultFieldOfReceiver.java | 17 ++--- .../modification/link/impl/TestCast.java | 21 +++--- .../link/impl/TestChainedReassignment.java | 17 ++--- .../impl/TestConcurrentMethodCallWrite.java | 17 ++--- .../modification/link/impl/TestDependent.java | 17 ++--- .../impl/TestForkJoinNestedAlternatives.java | 11 +-- .../modification/link/impl/TestGetSet.java | 19 +++--- .../link/impl/TestIgnoreModifications.java | 17 ++--- .../modification/link/impl/TestImmutable.java | 19 +++--- .../link/impl/TestInstanceOf.java | 21 +++--- .../link/impl/TestInstanceOfConditional.java | 9 +-- .../impl/TestLambdaWritesCapturedHolder.java | 9 +-- .../link/impl/TestLinkMethodCall.java | 17 ++--- .../link/impl/TestLinkModificationArea.java | 21 +++--- .../link/impl/TestLinkTypeParameters.java | 19 +++--- .../link/impl/TestLinkUnpreppedCallee.java | 21 +++--- .../impl/TestLinksBuilderAddAllDistinct.java | 17 ++--- .../link/impl/TestLinksLastWins.java | 15 ++-- .../modification/link/impl/TestList.java | 27 ++++---- .../link/impl/TestLocallyIndexedSummary.java | 17 ++--- .../link/impl/TestLoopFilledArray.java | 17 ++--- .../maddi/modification/link/impl/TestMap.java | 19 +++--- .../modification/link/impl/TestMapManual.java | 39 +++++------ .../link/impl/TestMarkDegradedRace.java | 17 ++--- .../link/impl/TestMediatedLinks.java | 27 ++++---- .../link/impl/TestReassignedLocalFaces.java | 17 ++--- .../link/impl/TestReassignedSource.java | 17 ++--- .../modification/link/impl/TestRecord.java | 17 ++--- .../impl/TestRedundantModificationLinks.java | 17 ++--- .../link/impl/TestRemoveChainWork.java | 15 ++-- .../impl/TestSelfReferentialReassignment.java | 17 ++--- .../modification/link/impl/TestShallow.java | 43 ++++++------ .../link/impl/TestShallowFunctional.java | 31 ++++----- .../modification/link/impl/TestStream.java | 21 +++--- .../link/impl/TestSummaryFieldCycle.java | 21 +++--- .../impl/TestSummaryObjectCreationFaces.java | 14 ++-- .../link/impl/TestSwitchExpression.java | 15 ++-- .../link/impl/TestSystemArrayCopy.java | 25 +++---- ...TestVariableTranslationAllowHierarchy.java | 17 ++--- .../impl/TestVariablesLinkedToObject.java | 23 ++++--- .../link/impl/TestVl2oAliases.java | 23 ++++--- .../link/impl/basics/TestLinkNature.java | 13 ++-- .../impl/basics/TestSimpleSharedVariable.java | 24 +++---- .../link/impl/basics/TestStringBuilder.java | 17 ++--- .../link/impl/basics/TestSubBlocks.java | 17 ++--- .../link/impl/basics/TestVarargs.java | 19 +++--- .../impl/graph/TestClosureWitnessIndex.java | 7 +- .../graph/TestDegradedAnalysisException.java | 4 +- .../link/impl/graph/TestEngine.java | 15 ++-- .../impl/graph/TestEngineDeterminism.java | 13 ++-- .../link/impl/graph/TestLabeledGraph.java | 9 +-- .../modification/link/impl/large/Test1.java | 23 ++++--- .../modification/link/impl/large/Test2.java | 11 +-- .../modification/link/impl/large/Test3.java | 11 +-- .../impl/large/TestBuilderChainBench.java | 9 +-- .../impl/large/TestDeepStructureBench.java | 7 +- .../link/impl/large/TestLinkGraph.java | 11 +-- .../impl/large/TestSaturatedClosureBench.java | 11 +-- .../impl/staticvalues/TestSharedVariable.java | 17 ++--- .../translate/TestVariableTranslationMap.java | 26 +++---- ...ieldTranslationMapForMethodParameters.java | 23 ++++--- .../link/io/TestJdkCollectionMutators.java | 29 ++++---- .../link/io/TestJdkCollectionViews.java | 30 ++++---- .../link/io/TestJdkReadOnlyTypes.java | 35 +++++----- .../link/io/TestLoadAnalyzedPackageFiles.java | 37 +++++----- .../link/io/TestWriteAnalysis.java | 23 ++++--- .../link/io/TestWriteAnalysis2.java | 41 +++++------ .../link/io/TestWriteAnalysisAssigned.java | 33 ++++----- .../link/io/TestWriteAnalysisMediated.java | 37 +++++----- .../link/io/TestWriteAnalysisPassNature.java | 37 +++++----- .../link/kotlin/CommonKotlinLinkTest.java | 25 +++---- .../kotlin/TestKotlinLinkCollections.java | 4 +- .../kotlin/TestKotlinLinkConditionals.java | 4 +- .../link/kotlin/TestKotlinLinkDelegation.java | 4 +- .../link/kotlin/TestKotlinLinkFields.java | 4 +- .../link/kotlin/TestKotlinLinkFunctions.java | 4 +- .../link/kotlin/TestKotlinLinkIsolation.java | 4 +- .../link/kotlin/TestKotlinLinkLambdas.java | 4 +- .../link/kotlin/TestKotlinLinkTypes.java | 6 +- .../link/nullflow/TestNullFlowProbe.java | 23 ++++--- .../link/staticvalues/TestAssignToField.java | 19 +++--- .../link/staticvalues/TestStaticValues1.java | 37 +++++----- .../staticvalues/TestStaticValuesGetSet.java | 21 +++--- .../TestStaticValuesIndexing.java | 19 +++--- .../staticvalues/TestStaticValuesMerge.java | 19 +++--- .../staticvalues/TestStaticValuesRecord.java | 39 +++++------ .../link/typelink/TestArrayAccess.java | 21 +++--- .../TestAssignmentIdentityMethod.java | 15 ++-- .../link/typelink/TestBiFunction.java | 17 ++--- .../link/typelink/TestCollectorSpec.java | 19 +++--- .../link/typelink/TestConstructor.java | 31 +++++---- .../link/typelink/TestConsumers.java | 23 ++++--- .../link/typelink/TestForEach.java | 31 +++++---- .../link/typelink/TestForEachLambda.java | 31 +++++---- .../typelink/TestForEachMethodReference.java | 29 ++++---- .../link/typelink/TestFunction.java | 21 +++--- .../typelink/TestGapOwnFieldModification.java | 15 ++-- .../link/typelink/TestLanguageConstructs.java | 15 ++-- .../modification/link/typelink/TestList.java | 41 +++++------ .../modification/link/typelink/TestMap.java | 27 ++++---- .../link/typelink/TestPrefix.java | 25 +++---- .../link/typelink/TestShallowArray.java | 17 ++--- .../link/typelink/TestShallowPrefix.java | 15 ++-- .../link/typelink/TestStaticBiFunction.java | 21 +++--- .../link/typelink/TestStream.java | 37 +++++----- .../link/typelink/TestStreamBasics.java | 33 ++++----- .../link/typelink/TestStreamForEachSpec.java | 19 +++--- .../link/typelink/TestStreamMapSpec.java | 25 +++---- .../link/typelink/TestSupplier.java | 19 +++--- .../link/typelink/TestSupplierSpec.java | 19 +++--- .../link/vf/TestInnerOfGenericClass.java | 13 ++-- .../link/vf/TestVirtualFieldComputer.java | 23 ++++--- .../link/vf/TestVirtualFieldComputer2.java | 21 +++--- .../link/vf/TestVirtualFieldComputer3.java | 21 +++--- .../link/vf/TestVirtualFieldTable.java | 21 +++--- .../vf/TestVirtualFieldTranslationMap.java | 27 ++++---- .../modification/prepwork/ClearDerived.java | 6 +- .../modification/prepwork/MethodAnalyzer.java | 26 +++---- .../modification/prepwork/PrepAnalyzer.java | 45 ++++++------ .../maddi/modification/prepwork/Util.java | 30 ++++---- .../ComputePartOfConstructionFinalField.java | 22 +++--- .../prepwork/escape/ComputeAlwaysEscapes.java | 4 +- .../prepwork/io/AnalysisFingerprint.java | 22 +++--- .../prepwork/io/DecoratorImpl.java | 14 ++-- .../prepwork/io/IncrementalState.java | 15 ++-- .../prepwork/io/LoadAnalysisResults.java | 31 +++++---- .../prepwork/io/NullabilityDecorator.java | 12 ++-- .../prepwork/io/PrepWorkCodec.java | 14 ++-- .../prepwork/io/WriteAnalysisResults.java | 25 +++---- .../modification/prepwork/variable/Link.java | 9 +-- .../prepwork/variable/LinkNature.java | 4 +- .../prepwork/variable/LinkedVariables.java | 4 +- .../modification/prepwork/variable/Links.java | 15 ++-- .../variable/MethodLinkedVariables.java | 8 +-- .../prepwork/variable/ReturnVariable.java | 1 - .../prepwork/variable/VariableData.java | 6 +- .../prepwork/variable/VariableInfo.java | 9 ++- .../variable/VirtualFieldTranslationMap.java | 4 +- .../prepwork/variable/impl/Assignments.java | 10 +-- .../prepwork/variable/impl/LinksImpl.java | 24 +++---- .../impl/ObjectCreationVariableImpl.java | 13 ++-- .../variable/impl/ReturnVariableImpl.java | 13 ++-- .../variable/impl/VariableDataImpl.java | 21 +++--- .../impl/VariableInfoContainerImpl.java | 2 +- .../variable/impl/VariableInfoImpl.java | 16 ++--- .../modification/prepwork/CommonTest.java | 32 ++++----- .../prepwork/TestAnonymousMemberRecord.java | 5 +- .../prepwork/TestDegradedAnalysisMarker.java | 15 ++-- .../TestGap151SwitchInAnonymousField.java | 7 +- .../prepwork/TestGetSetFieldRewire.java | 15 ++-- .../TestImplementationsAfterRewire.java | 31 +++++---- .../prepwork/TestIndependentRewire.java | 19 +++--- .../prepwork/TestInheritedSamRewire.java | 11 +-- .../prepwork/TestPrepAfterPartialReparse.java | 31 +++++---- .../TestPrepOnePrimaryTypeAtATime.java | 33 ++++----- .../prepwork/TestReprepKeepType.java | 33 ++++----- .../prepwork/callgraph/TestCallGraph2.java | 44 ++++++------ .../callgraph/TestCallGraphLocalClass.java | 28 ++++---- .../TestComputePartOfConstruction.java | 30 ++++---- .../callgraph/TestEarlyCutoffWorklist.java | 6 +- .../TestFinalFieldBranchAssignment.java | 17 ++--- .../callgraph/TestJavadocEdgeIsFiltered.java | 15 ++-- .../TestPartOfConstructionAndJavadoc.java | 15 ++-- .../callgraph/TestPrimaryTypeUseGraph.java | 36 +++++----- .../callgraph/TestTypeUseAnnotationEdge.java | 22 +++--- .../TestCloneBenchMethodHistogram.java | 31 +++++---- .../prepwork/escape/TestAlwaysEscapes.java | 15 ++-- .../io/TestAnalysisResultsFormat.java | 19 +++--- .../prepwork/io/TestDecorateEventual.java | 19 +++--- .../io/TestDecorateStaticSideEffects.java | 17 ++--- .../prepwork/io/TestModuleGatedHints.java | 19 +++--- .../prepwork/kotlin/CommonKotlinTest.java | 27 ++++---- .../kotlin/TestKotlinAssignments.java | 4 +- .../prepwork/kotlin/TestKotlinEscapes.java | 11 +-- .../prepwork/kotlin/TestKotlinLambdas.java | 17 ++--- .../prepwork/kotlin/TestKotlinLoops.java | 4 +- .../prepwork/kotlin/TestKotlinTry.java | 7 +- .../prepwork/kotlin/TestKotlinTypeLevel.java | 21 +++--- .../prepwork/objectcreation/TestTrack1.java | 19 +++--- .../variable/TestApplyGetSetTranslation.java | 17 ++--- .../prepwork/variable/TestAssignments.java | 19 +++--- .../variable/TestAssignmentsConstructor.java | 13 ++-- .../TestAssignmentsDependentVariable.java | 13 ++-- .../variable/TestAssignmentsDoWhile.java | 13 ++-- .../variable/TestAssignmentsEmpty.java | 15 ++-- .../variable/TestAssignmentsExpression.java | 19 +++--- .../TestAssignmentsExpressionForms.java | 13 ++-- .../variable/TestAssignmentsFieldAccess.java | 13 ++-- .../variable/TestAssignmentsForEachIf.java | 17 ++--- .../variable/TestAssignmentsInConditions.java | 13 ++-- .../variable/TestAssignmentsInstanceOf.java | 18 ++--- .../TestAssignmentsInstanceOfFlow.java | 16 ++--- .../variable/TestAssignmentsLabeledBreak.java | 15 ++-- .../variable/TestAssignmentsNoExit.java | 13 ++-- .../variable/TestAssignmentsReturn.java | 15 ++-- .../variable/TestAssignmentsReuse.java | 19 +++--- .../variable/TestAssignmentsSwitch.java | 15 ++-- .../TestAssignmentsSwitchNewStyle.java | 15 ++-- .../TestAssignmentsSwitchNullGuard.java | 13 ++-- .../TestAssignmentsSwitchOldStyle.java | 13 ++-- .../variable/TestAssignmentsSyncAssert.java | 13 ++-- .../prepwork/variable/TestAssignmentsTry.java | 25 +++---- .../variable/TestAssignmentsTryFinally.java | 15 ++-- .../prepwork/variable/TestCast.java | 25 +++---- .../prepwork/variable/TestCastArray.java | 17 ++--- .../TestDoNotRecurseIntoAnonymous.java | 17 ++--- .../prepwork/variable/TestGetSet.java | 19 +++--- .../prepwork/variable/TestGetSet2.java | 17 ++--- .../variable/TestGetSetGuardTolerance.java | 13 ++-- .../variable/TestHasBeenDefinedLocals.java | 13 ++-- .../TestInstanceOfPatternVariables.java | 17 ++--- .../variable/TestLabeledContinue.java | 17 ++--- .../prepwork/variable/TestLambda.java | 27 ++++---- .../prepwork/variable/TestLocalType.java | 15 ++-- .../variable/TestMergeLocalVariables.java | 11 +-- .../prepwork/variable/TestReads.java | 17 ++--- .../prepwork/variable/TestReassignment.java | 17 +++-- .../prepwork/variable/TestRecord.java | 19 +++--- .../TestShadowedCapturedVariable.java | 33 ++++----- .../variable/TestSwitchExpression.java | 15 ++-- .../variable/TestSwitchExpressionLocals.java | 16 ++--- .../variable/TestSwitchLabeledBreak.java | 23 ++++--- .../variable/TestSwitchNoDefaultMerge.java | 15 ++-- .../prepwork/variable/TestVariableData.java | 23 ++++--- .../variable/TestVariableDataArrays.java | 19 +++--- .../variable/TestVariableDataFlatten.java | 15 ++-- .../variable/TestVariableDataOrder.java | 13 ++-- .../TestVariableDataRegeneration.java | 19 +++--- .../variable/impl/TestAssignments.java | 4 +- .../variable/impl/TestAssignmentsLambda.java | 17 ++--- .../prepwork/variable/impl/TestReads.java | 6 +- .../run/analysis/AnalysisEngineImpl.java | 39 +++++------ .../maddi/run/main/TestRunAnalyzer.java | 17 ++--- .../maddi/run/main/TestRunComposer.java | 11 +-- .../run/main/TestRunShallowAnalyzer.java | 19 +++--- .../run/openjdkmain/CorpusNullability.java | 10 +-- .../GenerateSupportAnalysisResults.java | 21 +++--- .../run/openjdkmain/TestActiveMQBroker.java | 15 ++-- .../TestAnalysisEarlyCutoffPrototype.java | 42 ++++++------ .../TestAnalysisHintsCompilation.java | 21 +++--- .../openjdkmain/TestCompileLogCliPrep.java | 15 ++-- .../run/openjdkmain/TestCorpusSweep.java | 17 ++--- .../run/openjdkmain/TestDollarNamedType.java | 6 +- .../run/openjdkmain/TestEarlyCutoffSkip.java | 52 +++++++------- .../TestEarlyCutoffWorklistDriver.java | 60 ++++++++-------- .../openjdkmain/TestElasticsearchServer.java | 26 +++---- .../openjdkmain/TestErrorReportingPrep.java | 7 +- .../maddi/run/openjdkmain/TestFernflower.java | 13 ++-- .../TestFernflowerNullabilityCauses.java | 19 +++--- .../maddi/run/openjdkmain/TestGuava.java | 15 ++-- .../TestIncrementalConsumptionWake.java | 43 ++++++------ .../TestIsolateFernflowerGroup.java | 32 +++++---- .../TestJavaToCSharpFernflowerFacts.java | 7 +- .../TestJavaToCSharpLangchain4jFacts.java | 7 +- .../TestJavaToCSharpTimefoldFacts.java | 7 +- .../openjdkmain/TestJavaToKotlinAblation.java | 14 ++-- ...TestJavaToKotlinFernflowerNullability.java | 5 +- .../TestJavaToKotlinGuavaNullability.java | 5 +- ...estJavaToKotlinLangchain4jNullability.java | 5 +- .../TestJavaToKotlinPreconditions.java | 13 ++-- .../run/openjdkmain/TestJenkinsCore.java | 15 ++-- .../openjdkmain/TestKotlinConfReproduce.java | 11 +-- .../run/openjdkmain/TestLangchain4j.java | 13 ++-- .../TestLangchain4jCollections.java | 31 +++++---- .../openjdkmain/TestLibraryCallCensus.java | 31 +++++---- .../TestNullabilityOracleGuava.java | 52 +++++++------- .../openjdkmain/TestOutsideReloadCarry.java | 56 +++++++-------- .../run/openjdkmain/TestParSeqLinkBench.java | 27 ++++---- .../openjdkmain/TestRewireAnonymousType.java | 29 ++++---- .../run/openjdkmain/TestRewireFernflower.java | 23 ++++--- .../TestRewireInheritedPrivateField.java | 60 ++++++++-------- .../run/openjdkmain/TestRewireTests.java | 6 +- .../run/openjdkmain/TestRunAnalyzer.java | 15 ++-- .../run/openjdkmain/TestRunComposer.java | 11 +-- .../openjdkmain/TestRunShallowAnalyzer.java | 15 ++-- .../run/openjdkmain/TestTimefoldSolver.java | 13 ++-- .../openjdkmain/TestTranslateWithFacts.java | 6 +- .../TestWarmAnalysisAfterPartialReparse.java | 37 +++++----- .../TestWarmAnalysisWithCarry.java | 37 +++++----- .../run/kotlinmain/K2RealmTestBootstrap.java | 5 +- .../maddi/run/kotlinmain/KotlinFixture.java | 20 +++--- .../run/kotlinmain/TestCoilJvmSlice.java | 29 ++++---- .../TestCollectionHoldersVsJava.java | 29 ++++---- .../run/kotlinmain/TestDetektCorpus.java | 29 ++++---- ...LinkDoesNotSuppressARecordedReference.java | 23 ++++--- .../run/kotlinmain/TestExposedCorpus.java | 23 ++++--- .../kotlinmain/TestKotlinAbstractMember.java | 33 ++++----- .../TestKotlinAnalysisRoundTrip.java | 38 +++++------ .../kotlinmain/TestKotlinArchiveAttaches.java | 23 ++++--- .../TestKotlinCollectionReadsVsJava.java | 29 ++++---- .../kotlinmain/TestKotlinContractsVsJava.java | 31 +++++---- .../TestKotlinLambdaVsJavaLambda.java | 33 +++++---- .../kotlinmain/TestKotlinLazyVsJavaLazy.java | 31 +++++---- .../TestKotlinPredicatesVsJava.java | 34 +++++----- .../kotlinmain/TestKotlinPrepFailures.java | 9 +-- .../TestKotlinScopeFunctionsVsJava.java | 29 ++++---- .../kotlinmain/TestLoweredShapesVsJava.java | 35 +++++----- .../kotlinmain/TestMixedBoundaryVerdicts.java | 35 +++++----- .../maddi/run/kotlinmain/TestMixedMain.java | 17 ++--- .../kotlinmain/TestOneEntryPointAnalysis.java | 24 +++---- .../run/kotlinmain/TestRetrofitCorpus.java | 21 +++--- .../kotlinmain/TestRunMixedPrepAnalyzer.java | 15 ++-- .../kotlinmain/TestSealedErrorHierarchy.java | 15 ++-- .../kotlinmain/TestShippedResultsLoaded.java | 17 ++--- 698 files changed, 6761 insertions(+), 6345 deletions(-) diff --git a/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHints.java b/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHints.java index 0ffd49fd1..490ee1cc9 100644 --- a/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHints.java +++ b/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHints.java @@ -1,14 +1,14 @@ package io.codelaser.maddi.aapi.parser; -import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; - import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.util.List; import java.util.Objects; import java.util.Set; +import io.codelaser.maddi.cst.api.element.SourceSet; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; + /** * * @param libraryName the name (for logging purposes only) diff --git a/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsCompiler.java b/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsCompiler.java index 00f93be27..9120478bb 100644 --- a/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsCompiler.java +++ b/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsCompiler.java @@ -17,9 +17,15 @@ package io.codelaser.maddi.aapi.parser; -import io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer; -import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; -import io.codelaser.maddi.modification.prepwork.io.WriteAnalysisResults; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.slf4j.LoggerFactory; + import io.codelaser.maddi.cst.api.analysis.Message; import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.info.Info; @@ -31,15 +37,10 @@ import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.inspection.api.integration.JavaInspectorFactory; +import io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer; +import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; +import io.codelaser.maddi.modification.prepwork.io.WriteAnalysisResults; import io.codelaser.maddi.util.Trie; -import org.slf4j.LoggerFactory; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.util.HashSet; -import java.util.List; -import java.util.Set; /* From analysis hints to machine-readable analysis results in json format. diff --git a/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsComposer.java b/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsComposer.java index ed48709b8..3b7104e7e 100644 --- a/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsComposer.java +++ b/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsComposer.java @@ -18,6 +18,19 @@ package io.codelaser.maddi.aapi.parser; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.codelaser.maddi.cst.api.element.Comment; import io.codelaser.maddi.cst.api.element.CompilationUnit; import io.codelaser.maddi.cst.api.element.Element; @@ -32,18 +45,6 @@ import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.util.StringUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.nio.charset.StandardCharsets; -import java.util.*; -import java.util.function.Function; -import java.util.function.Predicate; -import java.util.stream.Collectors; /* diff --git a/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsParser.java b/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsParser.java index f9452d340..5cb2fd217 100644 --- a/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsParser.java +++ b/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsParser.java @@ -17,26 +17,25 @@ package io.codelaser.maddi.aapi.parser; -import io.codelaser.maddi.analysis.api.AnalysisHintsShadows; +import java.io.IOException; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; -import io.codelaser.maddi.modification.common.defaults.AnnotationProvider; -import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.analysis.api.AnalysisHintsShadows; import io.codelaser.maddi.cst.api.element.*; import io.codelaser.maddi.cst.api.expression.AnnotationExpression; -import io.codelaser.maddi.cst.api.expression.StringConstant; import io.codelaser.maddi.cst.api.info.*; import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.inspection.api.integration.JavaInspectorFactory; import io.codelaser.maddi.inspection.api.parser.ParseResult; import io.codelaser.maddi.inspection.api.resource.CompiledTypesManager; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import io.codelaser.maddi.modification.common.defaults.AnnotationProvider; +import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; /* Read the analysis hints of a library/JDK. diff --git a/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsWriter.java b/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsWriter.java index a2ba5915d..1216c4ee1 100644 --- a/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsWriter.java +++ b/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsWriter.java @@ -17,14 +17,6 @@ package io.codelaser.maddi.aapi.parser; -import io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer; -import io.codelaser.maddi.cst.api.element.Element; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import io.codelaser.maddi.util.Trie; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.io.File; import java.io.IOException; import java.util.Arrays; @@ -34,6 +26,15 @@ import java.util.function.Function; import java.util.stream.Collectors; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.cst.api.element.Element; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer; +import io.codelaser.maddi.util.Trie; + public class AnalysisHintsWriter { private static final Logger LOGGER = LoggerFactory.getLogger(AnalysisHintsWriter.class); private final JavaInspector javaInspector; diff --git a/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/CompilerVisitor.java b/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/CompilerVisitor.java index 3a006174e..cfa67a1f3 100644 --- a/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/CompilerVisitor.java +++ b/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/CompilerVisitor.java @@ -17,11 +17,11 @@ package io.codelaser.maddi.aapi.parser; -import io.codelaser.maddi.modification.common.defaults.DebugVisitor; +import java.util.Set; + import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.inspection.api.integration.JavaInspector; - -import java.util.Set; +import io.codelaser.maddi.modification.common.defaults.DebugVisitor; public interface CompilerVisitor { diff --git a/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/DecoratorWithComments.java b/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/DecoratorWithComments.java index 7af8737fe..9f0bda80c 100644 --- a/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/DecoratorWithComments.java +++ b/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/DecoratorWithComments.java @@ -18,8 +18,12 @@ package io.codelaser.maddi.aapi.parser; -import io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer; -import io.codelaser.maddi.modification.prepwork.io.DecoratorImpl; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Stream; + import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.element.Comment; import io.codelaser.maddi.cst.api.element.Element; @@ -30,12 +34,8 @@ import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.output.Qualification; import io.codelaser.maddi.cst.api.runtime.Runtime; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Stream; +import io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer; +import io.codelaser.maddi.modification.prepwork.io.DecoratorImpl; class DecoratorWithComments extends DecoratorImpl { diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/CommonTest.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/CommonTest.java index be928e229..91c5b5876 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/CommonTest.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/CommonTest.java @@ -17,37 +17,32 @@ package io.codelaser.maddi.aapi.parser; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.MUTABLE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.List; + +import org.jspecify.annotations.NonNull; +import org.junit.jupiter.api.BeforeAll; +import org.slf4j.LoggerFactory; + import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; -import io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer; -import io.codelaser.maddi.annotation.Immutable; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.graph.G; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.inspection.api.integration.JavaInspectorFactory; import io.codelaser.maddi.inspection.api.resource.CompiledTypesManager; -import io.codelaser.maddi.inspection.api.resource.InputConfiguration; -import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import io.codelaser.maddi.graph.G; -import org.jspecify.annotations.NonNull; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.junit.platform.commons.JUnitException; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.nio.file.Path; -import java.util.List; - -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.MUTABLE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; -import static org.junit.jupiter.api.Assertions.assertSame; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer; public class CommonTest { private static CompiledTypesManager compiledTypesManager; diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/CompileAnalysisHints.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/CompileAnalysisHints.java index 31d949781..b92505754 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/CompileAnalysisHints.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/CompileAnalysisHints.java @@ -17,17 +17,7 @@ package io.codelaser.maddi.aapi.parser; -import ch.qos.logback.classic.Level; -import io.codelaser.maddi.annotation.Immutable; -import io.codelaser.maddi.cst.api.analysis.Message; -import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import io.codelaser.maddi.inspection.api.integration.JavaInspectorFactory; -import io.codelaser.maddi.inspection.openjdk.JavaInspectorImpl; -import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import static io.codelaser.maddi.modification.common.CommonTest.javaInspectorFactory; import java.io.File; import java.io.IOException; @@ -39,7 +29,18 @@ import java.util.jar.JarEntry; import java.util.jar.JarOutputStream; -import static io.codelaser.maddi.modification.common.CommonTest.javaInspectorFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import ch.qos.logback.classic.Level; +import io.codelaser.maddi.annotation.Immutable; +import io.codelaser.maddi.cst.api.analysis.Message; +import io.codelaser.maddi.cst.api.element.SourceSet; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import io.codelaser.maddi.inspection.api.integration.JavaInspectorFactory; +import io.codelaser.maddi.inspection.openjdk.JavaInspectorImpl; +import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; /** * Compiles the hand-written analysis hints in {@code maddi-aapi-archive/src/main/java} into the analysis-result diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/ComposeAnalysisHints.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/ComposeAnalysisHints.java index be1d1d0a2..fd75103ee 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/ComposeAnalysisHints.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/ComposeAnalysisHints.java @@ -17,6 +17,15 @@ package io.codelaser.maddi.aapi.parser; +import java.io.IOException; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import ch.qos.logback.classic.Level; import io.codelaser.maddi.annotation.Immutable; import io.codelaser.maddi.cst.api.analysis.PropertyValueMap; @@ -34,14 +43,6 @@ import io.codelaser.maddi.inspection.resource.SourceSetImpl; import io.codelaser.maddi.modification.prepwork.io.DecoratorImpl; import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.Map; /** * Writes first-cut analysis hint sources for a whole library, from its JAR: one {@code PACKAGE_NAME} class per diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAnalysisHintsCompiler.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAnalysisHintsCompiler.java index 96ef80eab..06700c157 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAnalysisHintsCompiler.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAnalysisHintsCompiler.java @@ -17,12 +17,7 @@ package io.codelaser.maddi.aapi.parser; -import ch.qos.logback.classic.Level; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import static org.junit.jupiter.api.Assertions.fail; import java.io.IOException; import java.nio.file.Files; @@ -36,7 +31,13 @@ import java.util.jar.JarEntry; import java.util.jar.JarFile; -import static org.junit.jupiter.api.Assertions.fail; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import ch.qos.logback.classic.Level; /** * Fails when the committed analysis-result files in {@code maddi-aapi-archive} are no longer what the hints diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAnalysisHintsComposer.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAnalysisHintsComposer.java index ed3ba80de..5a63cdb10 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAnalysisHintsComposer.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAnalysisHintsComposer.java @@ -18,8 +18,25 @@ package io.codelaser.maddi.aapi.parser; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.File; +import java.io.IOException; +import java.lang.invoke.TypeDescriptor; +import java.net.URISyntaxException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.*; +import java.util.stream.Stream; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import ch.qos.logback.classic.Level; -import io.codelaser.maddi.modification.prepwork.io.DecoratorImpl; import io.codelaser.maddi.annotation.Immutable; import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.element.SourceSet; @@ -32,23 +49,7 @@ import io.codelaser.maddi.inspection.integration.JavaInspectorImpl; import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.File; -import java.io.IOException; -import java.lang.invoke.TypeDescriptor; -import java.net.URISyntaxException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.*; -import java.util.stream.Stream; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.prepwork.io.DecoratorImpl; public class TestAnalysisHintsComposer extends CommonTest { private static final Logger LOGGER = LoggerFactory.getLogger(TestAnalysisHintsComposer.class); diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAnalysisHintsParser.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAnalysisHintsParser.java index a3846b777..12bf0cd6b 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAnalysisHintsParser.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAnalysisHintsParser.java @@ -17,6 +17,18 @@ package io.codelaser.maddi.aapi.parser; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.file.Path; +import java.util.List; + +import org.jspecify.annotations.NonNull; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.slf4j.LoggerFactory; + import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; import io.codelaser.maddi.annotation.Immutable; @@ -31,17 +43,6 @@ import io.codelaser.maddi.inspection.openjdk.JavaInspectorImpl; import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import org.jspecify.annotations.NonNull; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.net.URISyntaxException; -import java.nio.file.Path; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; public class TestAnalysisHintsParser extends CommonTest { @BeforeAll diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAnalysisHintsParserOverloads.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAnalysisHintsParserOverloads.java index b54f79303..7d7ed7ad6 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAnalysisHintsParserOverloads.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAnalysisHintsParserOverloads.java @@ -17,18 +17,19 @@ package io.codelaser.maddi.aapi.parser; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; +import static org.junit.jupiter.api.Assertions.*; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import static org.junit.jupiter.api.Assertions.*; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; /** * Overloads that share name, arity and erased parameter types. Kotlin's {@code @JvmName("minOrThrow")} puts three diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAssumedDefaults.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAssumedDefaults.java index 424f0c65f..a5a34fd14 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAssumedDefaults.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAssumedDefaults.java @@ -17,13 +17,9 @@ package io.codelaser.maddi.aapi.parser; -import io.codelaser.maddi.cst.api.analysis.Property; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.junit.jupiter.api.Test; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assumptions.assumeTrue; import java.io.IOException; import java.nio.file.Files; @@ -31,9 +27,14 @@ import java.util.*; import java.util.stream.Collectors; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assumptions.assumeTrue; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Property; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; /* What the JDK hints leave open: the methods that are modifying, and the parameters that are modified, only because no diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestComposeAnalysisHintsScope.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestComposeAnalysisHintsScope.java index 8d3e19162..52023167c 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestComposeAnalysisHintsScope.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestComposeAnalysisHintsScope.java @@ -17,13 +17,14 @@ package io.codelaser.maddi.aapi.parser; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.util.List; -import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; /** * The two knobs that scope a library's hints to what a consumer sees: {@code -Pmaddi.compose.exclude} (Eclipse diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestParseAnalyzeWrite.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestParseAnalyzeWrite.java index e4b2c1b17..f9c120426 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestParseAnalyzeWrite.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestParseAnalyzeWrite.java @@ -17,26 +17,10 @@ package io.codelaser.maddi.aapi.parser; -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.Logger; -import io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import io.codelaser.maddi.util.Trie; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.function.Executable; -import org.junit.jupiter.api.function.ThrowingSupplier; -import org.slf4j.ILoggerFactory; -import org.slf4j.LoggerFactory; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; +import static io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer.AnnotationOrigin.*; +import static org.junit.jupiter.api.Assertions.*; -import javax.swing.*; -import javax.swing.table.TableColumn; -import javax.swing.text.JTextComponent; import java.awt.*; import java.io.*; import java.lang.annotation.Annotation; @@ -59,9 +43,27 @@ import java.util.stream.Stream; import java.util.zip.ZipOutputStream; -import static io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer.AnnotationOrigin.*; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; -import static org.junit.jupiter.api.Assertions.*; +import javax.swing.*; +import javax.swing.table.TableColumn; +import javax.swing.text.JTextComponent; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.function.Executable; +import org.junit.jupiter.api.function.ThrowingSupplier; +import org.slf4j.ILoggerFactory; +import org.slf4j.LoggerFactory; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer; +import io.codelaser.maddi.util.Trie; public class TestParseAnalyzeWrite extends CommonTest { private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(TestParseAnalyzeWrite.class); diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaAwt.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaAwt.java index 304601eef..ae8e06229 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaAwt.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaAwt.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.aapi.parser.archive; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.COMMUTABLE_METHODS; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.awt.*; + +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.aapi.parser.CommonTest; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.junit.jupiter.api.Test; - -import java.awt.*; - -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.COMMUTABLE_METHODS; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; public class TestJavaAwt extends CommonTest { diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaIo.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaIo.java index c124cc418..940d3771c 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaIo.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaIo.java @@ -17,23 +17,24 @@ package io.codelaser.maddi.aapi.parser.archive; -import io.codelaser.maddi.aapi.parser.CommonTest; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.junit.jupiter.api.Test; - -import java.io.*; - -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.NullabilityImpl.UNSPECIFIED; import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.FINAL_FIELDS; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.MUTABLE; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.*; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.NullabilityImpl.UNSPECIFIED; import static org.junit.jupiter.api.Assertions.*; +import java.io.*; + +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.aapi.parser.CommonTest; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; + public class TestJavaIo extends CommonTest { // read-only arguments the library-call census (TestLibraryCallCensus, 2026-10-12) found read as modified diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaLang.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaLang.java index 40339edf1..83a6c3490 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaLang.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaLang.java @@ -17,6 +17,18 @@ package io.codelaser.maddi.aapi.parser.archive; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.*; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.*; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.NullabilityImpl.UNSPECIFIED; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.NoSuchElementException; + +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.aapi.parser.CommonTest; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.FieldInfo; @@ -24,17 +36,6 @@ import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.info.TypeParameter; -import org.junit.jupiter.api.Test; - -import java.util.NoSuchElementException; - -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.NullabilityImpl.UNSPECIFIED; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.*; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.*; -import static org.junit.jupiter.api.Assertions.*; public class TestJavaLang extends CommonTest { diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaLangAnnotation.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaLangAnnotation.java index 1a780603f..d8af021dd 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaLangAnnotation.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaLangAnnotation.java @@ -17,17 +17,6 @@ package io.codelaser.maddi.aapi.parser.archive; -import io.codelaser.maddi.aapi.parser.CommonTest; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.junit.jupiter.api.Test; - -import java.lang.annotation.Annotation; -import java.lang.annotation.AnnotationTypeMismatchException; -import java.lang.annotation.ElementType; -import java.lang.annotation.IncompleteAnnotationException; -import java.lang.annotation.RetentionPolicy; - import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.CONTAINER_TYPE; import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_METHOD; import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE; @@ -44,6 +33,18 @@ import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertTrue; +import java.lang.annotation.Annotation; +import java.lang.annotation.AnnotationTypeMismatchException; +import java.lang.annotation.ElementType; +import java.lang.annotation.IncompleteAnnotationException; +import java.lang.annotation.RetentionPolicy; + +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.aapi.parser.CommonTest; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; + public class TestJavaLangAnnotation extends CommonTest { @Test diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaLangConstant.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaLangConstant.java index 1dd292455..878edd5c4 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaLangConstant.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaLangConstant.java @@ -17,13 +17,6 @@ package io.codelaser.maddi.aapi.parser.archive; -import io.codelaser.maddi.aapi.parser.CommonTest; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.junit.jupiter.api.Test; - -import java.lang.constant.Constable; - import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; @@ -34,6 +27,14 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertSame; +import java.lang.constant.Constable; + +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.aapi.parser.CommonTest; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; + public class TestJavaLangConstant extends CommonTest { @Test diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaLangReflect.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaLangReflect.java index 5a89940c8..1e4194668 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaLangReflect.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaLangReflect.java @@ -17,16 +17,17 @@ package io.codelaser.maddi.aapi.parser.archive; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.lang.reflect.Array; + +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.aapi.parser.CommonTest; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.junit.jupiter.api.Test; - -import java.lang.reflect.Array; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; public class TestJavaLangReflect extends CommonTest { diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaMath.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaMath.java index b59b41347..7aea3f706 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaMath.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaMath.java @@ -17,13 +17,6 @@ package io.codelaser.maddi.aapi.parser.archive; -import io.codelaser.maddi.aapi.parser.CommonTest; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.junit.jupiter.api.Test; - -import java.math.MathContext; -import java.math.RoundingMode; - import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.CONTAINER_TYPE; import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; @@ -32,6 +25,14 @@ import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.MUTABLE; import static org.junit.jupiter.api.Assertions.assertSame; +import java.math.MathContext; +import java.math.RoundingMode; + +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.aapi.parser.CommonTest; +import io.codelaser.maddi.cst.api.info.TypeInfo; + public class TestJavaMath extends CommonTest { // java.math is a package of immutable value types (operations return new instances, no array-output diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaNet.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaNet.java index 4304544b5..99bbfa0dc 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaNet.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaNet.java @@ -17,15 +17,6 @@ package io.codelaser.maddi.aapi.parser.archive; -import io.codelaser.maddi.aapi.parser.CommonTest; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.junit.jupiter.api.Test; - -import java.net.InetAddress; -import java.net.URI; -import java.net.URL; - import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.CONTAINER_TYPE; import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; @@ -35,6 +26,16 @@ import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertTrue; +import java.net.InetAddress; +import java.net.URI; +import java.net.URL; + +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.aapi.parser.CommonTest; +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.info.TypeInfo; + public class TestJavaNet extends CommonTest { // URI/URL/InetAddress are immutable value types (methods return new instances, no setters) -> diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaNetHttp.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaNetHttp.java index 08a420a2c..1a791e0c3 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaNetHttp.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaNetHttp.java @@ -17,17 +17,6 @@ package io.codelaser.maddi.aapi.parser.archive; -import io.codelaser.maddi.aapi.parser.CommonTest; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.junit.jupiter.api.Test; - -import java.net.URI; -import java.net.http.HttpRequest; -import java.net.http.HttpResponse; - import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; @@ -37,6 +26,18 @@ import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.INDEPENDENT; import static org.junit.jupiter.api.Assertions.*; +import java.net.URI; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; + +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.aapi.parser.CommonTest; +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; + public class TestJavaNetHttp extends CommonTest { @Test diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaNioCharset.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaNioCharset.java index 0de5bd6ae..f91ac3bad 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaNioCharset.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaNioCharset.java @@ -17,12 +17,6 @@ package io.codelaser.maddi.aapi.parser.archive; -import io.codelaser.maddi.aapi.parser.CommonTest; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.junit.jupiter.api.Test; - -import java.nio.charset.Charset; - import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.CONTAINER_TYPE; import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE; import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_TYPE; @@ -33,6 +27,13 @@ import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.INDEPENDENT; import static org.junit.jupiter.api.Assertions.assertSame; +import java.nio.charset.Charset; + +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.aapi.parser.CommonTest; +import io.codelaser.maddi.cst.api.info.TypeInfo; + public class TestJavaNioCharset extends CommonTest { // Charset is an immutable value; being abstract (extensible) it lands as @Immutable(hc=true), with diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaNioFile.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaNioFile.java index fc21b2995..aedfeef3b 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaNioFile.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaNioFile.java @@ -17,15 +17,16 @@ package io.codelaser.maddi.aapi.parser.archive; +import static org.junit.jupiter.api.Assertions.*; + +import java.nio.file.Files; + +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.aapi.parser.CommonTest; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.junit.jupiter.api.Test; - -import java.nio.file.Files; - -import static org.junit.jupiter.api.Assertions.*; /* RULES FOR THE FILES OBJECT diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaSecurity.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaSecurity.java index 924e92d13..6ac38d7c1 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaSecurity.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaSecurity.java @@ -17,22 +17,23 @@ package io.codelaser.maddi.aapi.parser.archive; -import io.codelaser.maddi.aapi.parser.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.junit.jupiter.api.Test; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.CONTAINER_TYPE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; +import static org.junit.jupiter.api.Assertions.*; import java.security.MessageDigest; import java.security.Principal; import java.security.SecureRandom; import java.util.stream.Collectors; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.CONTAINER_TYPE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; -import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.aapi.parser.CommonTest; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; public class TestJavaSecurity extends CommonTest { diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaTime.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaTime.java index f5537fb7a..c316fe24d 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaTime.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaTime.java @@ -17,12 +17,20 @@ package io.codelaser.maddi.aapi.parser.archive; -import io.codelaser.maddi.aapi.parser.CommonTest; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.info.FieldInfo; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.junit.jupiter.api.Test; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.CONTAINER_TYPE; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_FIELD; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_METHOD; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_METHOD; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.IMMUTABLE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.MUTABLE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.INDEPENDENT; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.time.DayOfWeek; import java.time.Duration; @@ -41,20 +49,13 @@ import java.time.temporal.TemporalAmount; import java.time.temporal.TemporalUnit; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.CONTAINER_TYPE; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_FIELD; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_METHOD; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_METHOD; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.IMMUTABLE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.MUTABLE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.INDEPENDENT; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertSame; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.aapi.parser.CommonTest; +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.info.FieldInfo; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; public class TestJavaTime extends CommonTest { diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaTimeFormat.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaTimeFormat.java index d315184a8..e7444b90c 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaTimeFormat.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaTimeFormat.java @@ -17,19 +17,6 @@ package io.codelaser.maddi.aapi.parser.archive; -import io.codelaser.maddi.aapi.parser.CommonTest; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.junit.jupiter.api.Test; - -import java.time.format.DateTimeFormatter; -import java.time.format.DateTimeFormatterBuilder; -import java.time.format.DecimalStyle; -import java.time.format.FormatStyle; -import java.time.format.ResolverStyle; -import java.time.format.SignStyle; -import java.time.format.TextStyle; - import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.CONTAINER_TYPE; import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; @@ -40,6 +27,20 @@ import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertTrue; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeFormatterBuilder; +import java.time.format.DecimalStyle; +import java.time.format.FormatStyle; +import java.time.format.ResolverStyle; +import java.time.format.SignStyle; +import java.time.format.TextStyle; + +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.aapi.parser.CommonTest; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; + public class TestJavaTimeFormat extends CommonTest { // DecimalStyle and the enums are immutable value types with no output-parameter method -> diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtil.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtil.java index 9b14a0b96..f91971d71 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtil.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtil.java @@ -17,27 +17,28 @@ package io.codelaser.maddi.aapi.parser.archive; -import io.codelaser.maddi.aapi.parser.CommonTest; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.analysis.Value.Independent; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.type.ParameterizedType; -import org.junit.jupiter.api.Test; - -import java.util.*; -import java.util.stream.Collectors; - -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.NullabilityImpl.UNSPECIFIED; import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.*; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.NO_VALUE; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.*; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.NullabilityImpl.UNSPECIFIED; import static org.junit.jupiter.api.Assertions.*; +import java.util.*; +import java.util.stream.Collectors; + +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.aapi.parser.CommonTest; +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.analysis.Value.Independent; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.type.ParameterizedType; + public class TestJavaUtil extends CommonTest { @Test diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilConcurrent.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilConcurrent.java index cb89154ff..23fdefa98 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilConcurrent.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilConcurrent.java @@ -17,11 +17,16 @@ package io.codelaser.maddi.aapi.parser.archive; -import io.codelaser.maddi.aapi.parser.CommonTest; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.junit.jupiter.api.Test; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.CONTAINER_TYPE; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_PARAMETER; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_TYPE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.INDEPENDENT_HC; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Map; import java.util.concurrent.CompletableFuture; @@ -33,16 +38,12 @@ import java.util.concurrent.Future; import java.util.concurrent.ThreadFactory; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.CONTAINER_TYPE; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_PARAMETER; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_TYPE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.INDEPENDENT_HC; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertSame; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.aapi.parser.CommonTest; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; public class TestJavaUtilConcurrent extends CommonTest { diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilConcurrentAtomic.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilConcurrentAtomic.java index 3ec47fb9e..758c808d4 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilConcurrentAtomic.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilConcurrentAtomic.java @@ -17,16 +17,6 @@ package io.codelaser.maddi.aapi.parser.archive; -import io.codelaser.maddi.aapi.parser.CommonTest; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.junit.jupiter.api.Test; - -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicReference; - import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.CONTAINER_TYPE; import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_PARAMETER; import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_TYPE; @@ -39,6 +29,17 @@ import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertTrue; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; + +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.aapi.parser.CommonTest; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; + public class TestJavaUtilConcurrentAtomic extends CommonTest { // AtomicBoolean/AtomicInteger hold an immutable primitive: @Container + deep @Independent. diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilFunction.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilFunction.java index a83a01194..c8c24cff1 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilFunction.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilFunction.java @@ -17,23 +17,24 @@ package io.codelaser.maddi.aapi.parser.archive; -import io.codelaser.maddi.aapi.parser.CommonTest; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.type.ParameterizedType; -import org.junit.jupiter.api.Test; - -import java.util.function.*; - -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.NullabilityImpl.UNSPECIFIED; import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.*; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.*; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.NullabilityImpl.UNSPECIFIED; import static org.junit.jupiter.api.Assertions.*; +import java.util.function.*; + +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.aapi.parser.CommonTest; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.type.ParameterizedType; + public class TestJavaUtilFunction extends CommonTest { @Test diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilLogging.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilLogging.java index a72021313..2c0b5a224 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilLogging.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilLogging.java @@ -17,14 +17,15 @@ package io.codelaser.maddi.aapi.parser.archive; -import io.codelaser.maddi.aapi.parser.CommonTest; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.util.logging.Logger; -import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.aapi.parser.CommonTest; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; public class TestJavaUtilLogging extends CommonTest { diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilRandom.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilRandom.java index e357d57f0..d5b69fb64 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilRandom.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilRandom.java @@ -17,17 +17,17 @@ package io.codelaser.maddi.aapi.parser.archive; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.random.RandomGenerator; + +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.aapi.parser.CommonTest; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.junit.jupiter.api.Test; - -import java.lang.reflect.Array; -import java.util.random.RandomGenerator; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; public class TestJavaUtilRandom extends CommonTest { diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilRegex.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilRegex.java index db418a412..f35eb0412 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilRegex.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilRegex.java @@ -17,14 +17,6 @@ package io.codelaser.maddi.aapi.parser.archive; -import io.codelaser.maddi.aapi.parser.CommonTest; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.junit.jupiter.api.Test; - -import java.util.regex.MatchResult; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.CONTAINER_TYPE; import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE; import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_TYPE; @@ -36,6 +28,15 @@ import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.INDEPENDENT; import static org.junit.jupiter.api.Assertions.assertSame; +import java.util.regex.MatchResult; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.aapi.parser.CommonTest; +import io.codelaser.maddi.cst.api.info.TypeInfo; + public class TestJavaUtilRegex extends CommonTest { // A compiled Pattern is a final, thread-safe immutable value. diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilStream.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilStream.java index f779a0527..ff1902597 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilStream.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilStream.java @@ -17,11 +17,14 @@ package io.codelaser.maddi.aapi.parser.archive; -import io.codelaser.maddi.aapi.parser.CommonTest; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.junit.jupiter.api.Test; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.IMMUTABLE_HC; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.MUTABLE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.*; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.NullabilityImpl.UNSPECIFIED; +import static org.junit.jupiter.api.Assertions.*; import java.util.stream.BaseStream; import java.util.stream.Collector; @@ -30,14 +33,12 @@ import java.util.stream.LongStream; import java.util.stream.Stream; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.NullabilityImpl.UNSPECIFIED; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.IMMUTABLE_HC; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.MUTABLE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.*; -import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.aapi.parser.CommonTest; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; public class TestJavaUtilStream extends CommonTest { diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilZip.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilZip.java index ea895b264..24a31f536 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilZip.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtilZip.java @@ -17,14 +17,15 @@ package io.codelaser.maddi.aapi.parser.archive; -import io.codelaser.maddi.aapi.parser.CommonTest; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.zip.ZipOutputStream; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.aapi.parser.CommonTest; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; public class TestJavaUtilZip extends CommonTest { diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaxSwing.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaxSwing.java index 7e7724d85..1ed4608f3 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaxSwing.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaxSwing.java @@ -17,18 +17,19 @@ package io.codelaser.maddi.aapi.parser.archive; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.COMMUTABLE_METHODS; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import javax.swing.*; + +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.aapi.parser.CommonTest; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.junit.jupiter.api.Test; - -import javax.swing.*; - -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.COMMUTABLE_METHODS; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; public class TestJavaxSwing extends CommonTest { diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaxSwingTable.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaxSwingTable.java index 68b680341..a82903032 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaxSwingTable.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaxSwingTable.java @@ -17,17 +17,18 @@ package io.codelaser.maddi.aapi.parser.archive; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.COMMUTABLE_METHODS; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import javax.swing.table.TableColumn; + +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.aapi.parser.CommonTest; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.junit.jupiter.api.Test; - -import javax.swing.table.TableColumn; - -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.COMMUTABLE_METHODS; -import static org.junit.jupiter.api.Assertions.assertTrue; public class TestJavaxSwingTable extends CommonTest { diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaxSwingText.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaxSwingText.java index b6647864b..bb2c80d79 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaxSwingText.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaxSwingText.java @@ -17,15 +17,16 @@ package io.codelaser.maddi.aapi.parser.archive; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import javax.swing.text.JTextComponent; + +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.aapi.parser.CommonTest; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.junit.jupiter.api.Test; - -import javax.swing.text.JTextComponent; - -import static org.junit.jupiter.api.Assertions.assertTrue; public class TestJavaxSwingText extends CommonTest { diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/example/jdk/JavaLang.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/example/jdk/JavaLang.java index 69876be35..61018cdf0 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/example/jdk/JavaLang.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/example/jdk/JavaLang.java @@ -17,12 +17,12 @@ package io.codelaser.maddi.aapi.parser.example.jdk; -import io.codelaser.maddi.annotation.*; - import java.util.Iterator; import java.util.Spliterator; import java.util.function.Consumer; +import io.codelaser.maddi.annotation.*; + public class JavaLang { final static String PACKAGE_NAME = "java.lang"; diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/AbstractMethodAnalyzer.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/AbstractMethodAnalyzer.java index 62e1ede96..6c8c3a2c2 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/AbstractMethodAnalyzer.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/AbstractMethodAnalyzer.java @@ -17,10 +17,10 @@ package io.codelaser.maddi.modification.analyzer; -import io.codelaser.maddi.cst.api.info.MethodInfo; - import java.util.List; +import io.codelaser.maddi.cst.api.info.MethodInfo; + public interface AbstractMethodAnalyzer { void go(boolean firstIteration, List abstractMethods); diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/AnalysisProgressFeed.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/AnalysisProgressFeed.java index 2e2238e7d..f1cceff6a 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/AnalysisProgressFeed.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/AnalysisProgressFeed.java @@ -17,12 +17,6 @@ package io.codelaser.maddi.modification.analyzer; -import io.codelaser.maddi.analysis.api.AnalysisValueFeed; - -import io.codelaser.maddi.cst.api.info.Info; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.io.File; import java.io.IOException; import java.lang.management.GarbageCollectorMXBean; @@ -34,6 +28,12 @@ import java.util.Collection; import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.analysis.api.AnalysisValueFeed; +import io.codelaser.maddi.cst.api.info.Info; + /** * Observability for the multi-hour analysis run: an {@link AnalysisValueFeed} that answers, on a * throttled heartbeat, the three questions a 5-8h (and, for the 3M-line target, longer) run leaves you diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/CheckpointWriter.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/CheckpointWriter.java index c66e27224..ea22296fd 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/CheckpointWriter.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/CheckpointWriter.java @@ -17,17 +17,6 @@ package io.codelaser.maddi.modification.analyzer; -import io.codelaser.maddi.analysis.api.AnalysisValueFeed; - -import io.codelaser.maddi.modification.prepwork.io.WriteAnalysisResults; -import io.codelaser.maddi.cst.api.analysis.Codec; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.runtime.Runtime; -import io.codelaser.maddi.util.Trie; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.io.File; import java.io.IOException; import java.nio.file.Files; @@ -35,6 +24,17 @@ import java.util.LinkedHashSet; import java.util.Set; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.analysis.api.AnalysisValueFeed; +import io.codelaser.maddi.cst.api.analysis.Codec; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.runtime.Runtime; +import io.codelaser.maddi.modification.prepwork.io.WriteAnalysisResults; +import io.codelaser.maddi.util.Trie; + /** * Checkpoint half of task #34 (checkpoint/resume v1): an {@link AnalysisValueFeed} that persists the * analyzed elements' values at every pass boundary, so a crashed multi-hour run (the elasticsearch diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/CompositeValueFeed.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/CompositeValueFeed.java index 21dcf50c6..367bea606 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/CompositeValueFeed.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/CompositeValueFeed.java @@ -17,14 +17,14 @@ package io.codelaser.maddi.modification.analyzer; -import io.codelaser.maddi.analysis.api.AnalysisValueFeed; +import java.util.Collection; +import java.util.List; -import io.codelaser.maddi.cst.api.info.Info; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Collection; -import java.util.List; +import io.codelaser.maddi.analysis.api.AnalysisValueFeed; +import io.codelaser.maddi.cst.api.info.Info; /** * The analyzer takes a single {@link AnalysisValueFeed} ({@code setValueFeed}); a long run wants two at diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/FieldAnalyzer.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/FieldAnalyzer.java index 99b1801ab..fd079d671 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/FieldAnalyzer.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/FieldAnalyzer.java @@ -19,9 +19,6 @@ import io.codelaser.maddi.annotation.Modified; import io.codelaser.maddi.cst.api.info.FieldInfo; -import io.codelaser.maddi.cst.api.info.Info; - -import java.util.Set; /* Level 2: diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/GuardAnalyzer.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/GuardAnalyzer.java index ccd3e9aab..50db823ff 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/GuardAnalyzer.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/GuardAnalyzer.java @@ -17,10 +17,10 @@ package io.codelaser.maddi.modification.analyzer; -import io.codelaser.maddi.cst.api.info.Info; - import java.util.List; +import io.codelaser.maddi.cst.api.info.Info; + /** * The guard: verifies user-written contracts against the analyzer's computed values, after the iterating * analyzer has reached its fixed point. Emits explanatory findings (ERROR level, category "contract-violation") diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/IteratingAnalyzer.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/IteratingAnalyzer.java index 1aae7c00f..dfea66f7a 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/IteratingAnalyzer.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/IteratingAnalyzer.java @@ -17,14 +17,12 @@ package io.codelaser.maddi.modification.analyzer; -import io.codelaser.maddi.modification.analyzer.nullability.World; -import io.codelaser.maddi.analysis.api.AnalysisValueFeed; +import java.util.List; -import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.analysis.api.AnalysisValueFeed; import io.codelaser.maddi.cst.api.analysis.Message; import io.codelaser.maddi.cst.api.info.Info; - -import java.util.List; +import io.codelaser.maddi.modification.link.LinkComputer; public interface IteratingAnalyzer { diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/SingleIterationAnalyzer.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/SingleIterationAnalyzer.java index fe6b7abed..2459b3eaa 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/SingleIterationAnalyzer.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/SingleIterationAnalyzer.java @@ -17,11 +17,11 @@ package io.codelaser.maddi.modification.analyzer; +import java.util.List; + import io.codelaser.maddi.cst.api.analysis.Message; import io.codelaser.maddi.cst.api.info.Info; -import java.util.List; - public interface SingleIterationAnalyzer { default void go(List analysisOrder, boolean activateCycleBreaking) { diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/TypeContainerAnalyzer.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/TypeContainerAnalyzer.java index 8571c0182..46880a006 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/TypeContainerAnalyzer.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/TypeContainerAnalyzer.java @@ -18,11 +18,8 @@ package io.codelaser.maddi.modification.analyzer; import io.codelaser.maddi.annotation.Modified; -import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; -import java.util.Set; - /* Level 4.2. diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/TypeImmutableAnalyzer.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/TypeImmutableAnalyzer.java index 9fbc58193..614db8f28 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/TypeImmutableAnalyzer.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/TypeImmutableAnalyzer.java @@ -17,13 +17,13 @@ package io.codelaser.maddi.modification.analyzer; +import java.util.Set; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; -import java.util.Set; - /* Phase 4.1 diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/TypeModIndyAnalyzer.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/TypeModIndyAnalyzer.java index d55a56aa6..68ee7a9d9 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/TypeModIndyAnalyzer.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/TypeModIndyAnalyzer.java @@ -17,12 +17,8 @@ package io.codelaser.maddi.modification.analyzer; -import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; -import java.util.Map; -import java.util.Set; - /* Phase 3: diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/AbstractMethodAnalyzerImpl.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/AbstractMethodAnalyzerImpl.java index c478378a5..23567bea4 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/AbstractMethodAnalyzerImpl.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/AbstractMethodAnalyzerImpl.java @@ -17,16 +17,11 @@ package io.codelaser.maddi.modification.analyzer.impl; -import io.codelaser.maddi.modification.common.util.TolerantWrite; -import io.codelaser.maddi.modification.analyzer.AbstractMethodAnalyzer; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.cst.api.analysis.Message; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.variable.Variable; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.INDEPENDENT; import java.util.*; import java.util.List; @@ -34,11 +29,16 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.INDEPENDENT; +import io.codelaser.maddi.cst.api.analysis.Message; +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.variable.Variable; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.analyzer.AbstractMethodAnalyzer; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.common.util.TolerantWrite; public class AbstractMethodAnalyzerImpl extends CommonAnalyzerImpl implements AbstractMethodAnalyzer { diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/AnalysisBudget.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/AnalysisBudget.java index 4976310d1..8d86658a2 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/AnalysisBudget.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/AnalysisBudget.java @@ -17,10 +17,10 @@ package io.codelaser.maddi.modification.analyzer.impl; -import io.codelaser.maddi.modification.analyzer.AnalysisBudgetExceededException; - import java.time.Duration; +import io.codelaser.maddi.modification.analyzer.AnalysisBudgetExceededException; + /** * The wall-clock deadline of one {@code IteratingAnalyzer.analyze} call (gap {@code G43}). The coordinator names * each pass before it starts; the workers check it per element, so {@link #check} must stay cheap and thread-safe. diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/CommonAnalyzerImpl.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/CommonAnalyzerImpl.java index 4a1209b8e..66d7a3e14 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/CommonAnalyzerImpl.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/CommonAnalyzerImpl.java @@ -17,13 +17,14 @@ package io.codelaser.maddi.modification.analyzer.impl; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.cst.api.analysis.Message; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; +import io.codelaser.maddi.cst.api.analysis.Message; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; public abstract class CommonAnalyzerImpl { public static final Logger DECIDE = LoggerFactory.getLogger("maddi.modanalyzer.decide"); diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/ContractResolution.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/ContractResolution.java index 2e21d2bb2..77cc9a5c5 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/ContractResolution.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/ContractResolution.java @@ -17,6 +17,9 @@ package io.codelaser.maddi.modification.analyzer.impl; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.Info; @@ -27,9 +30,6 @@ import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.modification.common.defaults.ContractReader; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - /** * Adjudicates the AUTHORED statements bearing on one method + property, across the method itself and the methods * it overrides. The single place that answers "is this decided by contract, and to what value". diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/DependentCulprit.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/DependentCulprit.java index 9f7b17d21..31cff2e67 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/DependentCulprit.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/DependentCulprit.java @@ -17,6 +17,9 @@ package io.codelaser.maddi.modification.analyzer.impl; +import java.util.ArrayList; +import java.util.List; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.expression.Assignment; @@ -40,9 +43,6 @@ import io.codelaser.maddi.modification.prepwork.variable.Links; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import java.util.ArrayList; -import java.util.List; - /** * The culprit of a DEPENDENT verdict ({@link PropertyImpl#DEPENDENT_CULPRIT}), written beside it when a run asks for * culprits. The reason is the link {@code TypeModIndyAnalyzerImpl.worstLinkToFields} rests on, the first one to a diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/DynamicImmutabilityInference.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/DynamicImmutabilityInference.java index dc016034b..d937bcda5 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/DynamicImmutabilityInference.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/DynamicImmutabilityInference.java @@ -17,7 +17,10 @@ package io.codelaser.maddi.modification.analyzer.impl; -import io.codelaser.maddi.modification.common.AnalysisHelper; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.expression.Assignment; import io.codelaser.maddi.cst.api.expression.ConstructorCall; @@ -31,10 +34,7 @@ import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; +import io.codelaser.maddi.modification.common.AnalysisHelper; /** * Infers what a field HOLDS, as opposed to what its declared type says it may hold — the producer for diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/ElementSummary.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/ElementSummary.java index 59a429064..22d881066 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/ElementSummary.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/ElementSummary.java @@ -17,6 +17,10 @@ package io.codelaser.maddi.modification.analyzer.impl; +import java.util.HashMap; +import java.util.Map; +import java.util.TreeMap; + import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.PropertyValueMap; import io.codelaser.maddi.cst.api.info.Info; @@ -24,10 +28,6 @@ import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; -import java.util.HashMap; -import java.util.Map; -import java.util.TreeMap; - /** * What a dependent can see of an element: its cross-type-derived values, and a method's parameters' values, as text * with names instead of identities, so that the summary of an element of one generation compares with the summary of diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/EventualCluster.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/EventualCluster.java index 624e5bd7a..32a90abfe 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/EventualCluster.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/EventualCluster.java @@ -17,22 +17,23 @@ package io.codelaser.maddi.modification.analyzer.impl; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.type.ParameterizedType; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import java.util.Arrays; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.type.ParameterizedType; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; + /** * EXPERIMENTAL, gated on {@code EVENTUALCLUSTER=1}. Breaks the circular recognition that stops the {@code Info} * family from being certified eventually immutable (see {@code docs/design/eventual-info-hierarchy.md}). diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/EventualClusterContraction.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/EventualClusterContraction.java index e65e4c5db..6e5cfb79e 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/EventualClusterContraction.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/EventualClusterContraction.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.modification.analyzer.impl; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; + /** * The contraction half of the {@link EventualCluster} greatest fixpoint (step 2). The oracle supplies the * optimistic seed and {@link EventualCluster#assumptions() records} every edge {@code member -> candidate} where a diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/FieldAnalyzerImpl.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/FieldAnalyzerImpl.java index c332fd89c..946e6a5f8 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/FieldAnalyzerImpl.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/FieldAnalyzerImpl.java @@ -1,16 +1,18 @@ package io.codelaser.maddi.modification.analyzer.impl; -import io.codelaser.maddi.modification.common.util.TolerantWrite; -import io.codelaser.maddi.modification.analyzer.FieldAnalyzer; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.common.AnalysisHelper; -import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; -import io.codelaser.maddi.modification.link.impl.LinkVariable; -import io.codelaser.maddi.modification.prepwork.Util; -import io.codelaser.maddi.modification.prepwork.variable.*; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableInfoImpl; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.INDEPENDENT; +import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.EMPTY_PART_OF_CONSTRUCTION; +import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.PART_OF_CONSTRUCTION; + +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.codelaser.maddi.cst.api.analysis.Message; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.expression.MethodReference; @@ -24,18 +26,17 @@ import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; - -import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.EMPTY_PART_OF_CONSTRUCTION; -import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.PART_OF_CONSTRUCTION; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.INDEPENDENT; +import io.codelaser.maddi.modification.analyzer.FieldAnalyzer; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.common.AnalysisHelper; +import io.codelaser.maddi.modification.common.util.TolerantWrite; +import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; +import io.codelaser.maddi.modification.link.impl.LinkVariable; +import io.codelaser.maddi.modification.prepwork.Util; +import io.codelaser.maddi.modification.prepwork.variable.*; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableInfoImpl; public class FieldAnalyzerImpl extends CommonAnalyzerImpl implements FieldAnalyzer { diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/GuardAnalyzerImpl.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/GuardAnalyzerImpl.java index b3383ed2d..61f15da1e 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/GuardAnalyzerImpl.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/GuardAnalyzerImpl.java @@ -17,22 +17,21 @@ package io.codelaser.maddi.modification.analyzer.impl; -import io.codelaser.maddi.modification.analyzer.GuardAnalyzer; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.common.AnalysisHelper; -import io.codelaser.maddi.modification.common.util.Culprits; -import io.codelaser.maddi.modification.common.defaults.ContractReader; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.Util; -import io.codelaser.maddi.modification.prepwork.variable.Link; -import io.codelaser.maddi.modification.prepwork.variable.Links; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; + +import io.codelaser.maddi.annotation.Independent; import io.codelaser.maddi.cst.api.analysis.Message; import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.element.Source; import io.codelaser.maddi.cst.api.expression.Assignment; import io.codelaser.maddi.cst.api.expression.ConstructorCall; @@ -49,20 +48,20 @@ import io.codelaser.maddi.cst.api.variable.DependentVariable; import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.Variable; -import io.codelaser.maddi.annotation.Independent; import io.codelaser.maddi.cst.impl.analysis.MessageImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.atomic.AtomicReference; -import java.util.stream.Collectors; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; +import io.codelaser.maddi.modification.analyzer.GuardAnalyzer; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.common.AnalysisHelper; +import io.codelaser.maddi.modification.common.defaults.ContractReader; +import io.codelaser.maddi.modification.common.util.Culprits; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.Util; +import io.codelaser.maddi.modification.prepwork.variable.Link; +import io.codelaser.maddi.modification.prepwork.variable.Links; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; /** * Verifies user-written contracts against the analyzer's computed values. diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/IteratingAnalyzerImpl.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/IteratingAnalyzerImpl.java index d2a0a4ce2..e7cf5666f 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/IteratingAnalyzerImpl.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/IteratingAnalyzerImpl.java @@ -17,24 +17,25 @@ package io.codelaser.maddi.modification.analyzer.impl; -import io.codelaser.maddi.modification.analyzer.nullability.Policy; -import io.codelaser.maddi.modification.analyzer.nullability.World; -import io.codelaser.maddi.modification.common.util.TolerantWrite; -import io.codelaser.maddi.modification.analyzer.CycleBreakingStrategy; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.SingleIterationAnalyzer; -import io.codelaser.maddi.cst.api.analysis.Message; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.time.Duration; import java.time.Instant; import java.util.ArrayList; import java.util.List; import java.util.stream.Stream; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.cst.api.analysis.Message; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import io.codelaser.maddi.modification.analyzer.CycleBreakingStrategy; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.SingleIterationAnalyzer; +import io.codelaser.maddi.modification.analyzer.nullability.Policy; +import io.codelaser.maddi.modification.analyzer.nullability.World; +import io.codelaser.maddi.modification.common.util.TolerantWrite; + public class IteratingAnalyzerImpl extends CommonAnalyzerImpl implements IteratingAnalyzer { private static final Logger LOGGER = LoggerFactory.getLogger(IteratingAnalyzerImpl.class); /** diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/LinkToField.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/LinkToField.java index 439b6d92d..d01fa6fc0 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/LinkToField.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/LinkToField.java @@ -17,18 +17,18 @@ package io.codelaser.maddi.modification.analyzer.impl; -import io.codelaser.maddi.modification.common.AnalysisHelper; -import io.codelaser.maddi.modification.link.impl.Gate; -import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; -import io.codelaser.maddi.modification.prepwork.Util; -import io.codelaser.maddi.modification.prepwork.variable.Link; -import io.codelaser.maddi.modification.prepwork.variable.Links; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.Variable; +import io.codelaser.maddi.modification.common.AnalysisHelper; +import io.codelaser.maddi.modification.link.impl.Gate; +import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; +import io.codelaser.maddi.modification.prepwork.Util; +import io.codelaser.maddi.modification.prepwork.variable.Link; +import io.codelaser.maddi.modification.prepwork.variable.Links; /** * One link, seen as "does this reach a field of the instance, and how mutable is what it reaches?". diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/ModAnalyzerForTesting.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/ModAnalyzerForTesting.java index e9f3c9aec..36823da46 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/ModAnalyzerForTesting.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/ModAnalyzerForTesting.java @@ -17,11 +17,10 @@ package io.codelaser.maddi.modification.analyzer.impl; -import io.codelaser.maddi.modification.common.AnalyzerException; -import io.codelaser.maddi.cst.api.info.Info; - import java.util.List; +import io.codelaser.maddi.cst.api.info.Info; + public interface ModAnalyzerForTesting { void go(List analysisOrder); diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/SingleIterationAnalyzerImpl.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/SingleIterationAnalyzerImpl.java index 778ee6320..60bb64ce6 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/SingleIterationAnalyzerImpl.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/SingleIterationAnalyzerImpl.java @@ -17,42 +17,43 @@ package io.codelaser.maddi.modification.analyzer.impl; -import io.codelaser.maddi.modification.common.util.TolerantWrite; -import io.codelaser.maddi.modification.analyzer.*; -import io.codelaser.maddi.modification.common.defaults.ShallowTypeAnalyzer; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.link.impl.Gate; -import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; -import io.codelaser.maddi.modification.link.impl.ReceiverLevel; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Stream; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.codelaser.maddi.cst.api.analysis.Message; import io.codelaser.maddi.cst.api.analysis.PropertyValueMap; import io.codelaser.maddi.cst.api.element.Element; -import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.runtime.Runtime; +import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.impl.analysis.AnalysisAccessRecorder; import io.codelaser.maddi.cst.impl.analysis.MessageImpl; import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Stream; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import io.codelaser.maddi.modification.analyzer.*; +import io.codelaser.maddi.modification.common.defaults.ShallowTypeAnalyzer; +import io.codelaser.maddi.modification.common.util.TolerantWrite; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.link.impl.Gate; +import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; +import io.codelaser.maddi.modification.link.impl.ReceiverLevel; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import io.codelaser.maddi.modification.prepwork.variable.VariableData; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class SingleIterationAnalyzerImpl implements SingleIterationAnalyzer, ModAnalyzerForTesting { private static final Logger LOGGER = LoggerFactory.getLogger(SingleIterationAnalyzerImpl.class); diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/SourceContractMaterializer.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/SourceContractMaterializer.java index 5f4df373c..6bd272382 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/SourceContractMaterializer.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/SourceContractMaterializer.java @@ -17,8 +17,15 @@ package io.codelaser.maddi.modification.analyzer.impl; -import io.codelaser.maddi.modification.common.defaults.ContractReader; -import io.codelaser.maddi.modification.common.util.TolerantWrite; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IGNORE_MODIFICATIONS_FIELD; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_FIELD; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_METHOD; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_METHOD; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.NON_MODIFYING_METHOD; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.STATIC_SIDE_EFFECTS_METHOD; + +import java.util.concurrent.atomic.AtomicInteger; + import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.expression.AnnotationExpression; @@ -28,15 +35,8 @@ import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; - -import java.util.concurrent.atomic.AtomicInteger; - -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IGNORE_MODIFICATIONS_FIELD; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_FIELD; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_METHOD; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_METHOD; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.NON_MODIFYING_METHOD; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.STATIC_SIDE_EFFECTS_METHOD; +import io.codelaser.maddi.modification.common.defaults.ContractReader; +import io.codelaser.maddi.modification.common.util.TolerantWrite; /** * Writes a user's dynamic type contract on a SOURCE field or method into {@code analysis()}. diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/StaticSideEffectAnalyzerImpl.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/StaticSideEffectAnalyzerImpl.java index 73fa1963d..e36424545 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/StaticSideEffectAnalyzerImpl.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/StaticSideEffectAnalyzerImpl.java @@ -17,16 +17,20 @@ package io.codelaser.maddi.modification.analyzer.impl; -import io.codelaser.maddi.modification.common.util.Culprits; -import io.codelaser.maddi.modification.common.util.OwnStaticState; -import io.codelaser.maddi.modification.common.util.TolerantWrite; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.expression.Assignment; import io.codelaser.maddi.cst.api.expression.ConstructorCall; import io.codelaser.maddi.cst.api.expression.Expression; -import io.codelaser.maddi.cst.api.expression.MethodReference; import io.codelaser.maddi.cst.api.expression.MethodCall; +import io.codelaser.maddi.cst.api.expression.MethodReference; import io.codelaser.maddi.cst.api.expression.VariableExpression; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -35,13 +39,9 @@ import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; - -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.atomic.AtomicInteger; +import io.codelaser.maddi.modification.common.util.Culprits; +import io.codelaser.maddi.modification.common.util.OwnStaticState; +import io.codelaser.maddi.modification.common.util.TolerantWrite; /** * Computes {@link PropertyImpl#STATIC_STATE_MODIFIED_METHOD}, the types whose static state a method modifies, and diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeContainerAnalyzerImpl.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeContainerAnalyzerImpl.java index 4e25a80a8..4a5c68dc1 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeContainerAnalyzerImpl.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeContainerAnalyzerImpl.java @@ -17,21 +17,20 @@ package io.codelaser.maddi.modification.analyzer.impl; -import io.codelaser.maddi.modification.common.util.TolerantWrite; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.TypeContainerAnalyzer; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; + +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + import io.codelaser.maddi.cst.api.analysis.Message; import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; - -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; - -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.TypeContainerAnalyzer; +import io.codelaser.maddi.modification.common.util.TolerantWrite; public class TypeContainerAnalyzerImpl extends CommonAnalyzerImpl implements TypeContainerAnalyzer { diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeCulprit.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeCulprit.java index becdc4c94..68aa9367f 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeCulprit.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeCulprit.java @@ -17,6 +17,13 @@ package io.codelaser.maddi.modification.analyzer.impl; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.*; + +import java.net.URI; +import java.util.ArrayList; +import java.util.List; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.element.Source; @@ -28,18 +35,10 @@ import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.FieldReference; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.common.AnalysisHelper; import io.codelaser.maddi.modification.common.util.Culprits; -import java.net.URI; -import java.util.ArrayList; -import java.util.List; - -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.*; - /** * Why a type stops below {@code @Immutable}: {@code IMMUTABLE_CULPRIT}, the first rule it fails at the member that * fails it, then that member's own culprit; and {@code DEPENDENT_CULPRIT} on a dependent type. Written after the diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeEventualAnalyzerImpl.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeEventualAnalyzerImpl.java index e0676e69c..349c7830e 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeEventualAnalyzerImpl.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeEventualAnalyzerImpl.java @@ -17,14 +17,28 @@ package io.codelaser.maddi.modification.analyzer.impl; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.variable.Link; -import io.codelaser.maddi.modification.prepwork.Util; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.TypeEventualAnalyzer; -import io.codelaser.maddi.modification.analyzer.TypeImmutableAnalyzer; -import io.codelaser.maddi.modification.common.defaults.ContractReader; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.EVENTUALLY_IMMUTABLE_TYPE; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.EVENTUALLY_NON_MODIFYING_METHOD; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.EVENTUALLY_UNMODIFIED_PARAMETER; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.EVENTUAL_METHOD; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.FINAL_FIELD; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.NON_MODIFYING_METHOD; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.UNMODIFIED_PARAMETER; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.EventualImpl.NOT_EVENTUAL; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + import io.codelaser.maddi.cst.api.analysis.Message; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.expression.Assignment; @@ -42,7 +56,6 @@ import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.api.statement.AssertStatement; import io.codelaser.maddi.cst.api.statement.Block; @@ -50,39 +63,26 @@ import io.codelaser.maddi.cst.api.statement.LocalTypeDeclaration; import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; import io.codelaser.maddi.cst.api.statement.ReturnStatement; +import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.api.statement.SynchronizedStatement; import io.codelaser.maddi.cst.api.statement.ThrowStatement; import io.codelaser.maddi.cst.api.statement.TryStatement; -import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.api.statement.YieldStatement; +import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.DependentVariable; import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.This; import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; - -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.EVENTUAL_METHOD; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.FINAL_FIELD; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.EVENTUALLY_IMMUTABLE_TYPE; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.EVENTUALLY_NON_MODIFYING_METHOD; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.EVENTUALLY_UNMODIFIED_PARAMETER; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.NON_MODIFYING_METHOD; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.UNMODIFIED_PARAMETER; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.EventualImpl.NOT_EVENTUAL; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.TypeEventualAnalyzer; +import io.codelaser.maddi.modification.analyzer.TypeImmutableAnalyzer; +import io.codelaser.maddi.modification.common.defaults.ContractReader; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.Util; +import io.codelaser.maddi.modification.prepwork.variable.Link; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; public class TypeEventualAnalyzerImpl extends CommonAnalyzerImpl implements TypeEventualAnalyzer { diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeImmutableAnalyzerImpl.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeImmutableAnalyzerImpl.java index f5d5fc6e7..3cd559659 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeImmutableAnalyzerImpl.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeImmutableAnalyzerImpl.java @@ -17,19 +17,9 @@ package io.codelaser.maddi.modification.analyzer.impl; -import io.codelaser.maddi.modification.analyzer.CycleBreakingStrategy; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.TypeImmutableAnalyzer; -import io.codelaser.maddi.modification.analyzer.TypeIndependentAnalyzer; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.modification.common.AnalysisHelper; -import io.codelaser.maddi.modification.common.util.TolerantWrite; -import io.codelaser.maddi.cst.api.analysis.Message; -import io.codelaser.maddi.cst.api.info.FieldInfo; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.type.ParameterizedType; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.*; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; import java.util.ArrayList; import java.util.Arrays; @@ -38,9 +28,19 @@ import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.*; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; +import io.codelaser.maddi.cst.api.analysis.Message; +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.info.FieldInfo; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.type.ParameterizedType; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.analyzer.CycleBreakingStrategy; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.TypeImmutableAnalyzer; +import io.codelaser.maddi.modification.analyzer.TypeIndependentAnalyzer; +import io.codelaser.maddi.modification.common.AnalysisHelper; +import io.codelaser.maddi.modification.common.util.TolerantWrite; /* Phase 4.2 Primary type immutable diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeIndependentAnalyzerImpl.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeIndependentAnalyzerImpl.java index cf0df1f18..cc0c0b51b 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeIndependentAnalyzerImpl.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeIndependentAnalyzerImpl.java @@ -17,24 +17,12 @@ package io.codelaser.maddi.modification.analyzer.impl; -import io.codelaser.maddi.modification.common.AnalysisHelper; -import io.codelaser.maddi.modification.common.defaults.ContractReader; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.variable.Link; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.modification.common.util.TolerantWrite; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.TypeImmutableAnalyzer; -import io.codelaser.maddi.modification.analyzer.TypeIndependentAnalyzer; -import io.codelaser.maddi.cst.api.analysis.Message; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.info.FieldInfo; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.runtime.Runtime; -import io.codelaser.maddi.cst.api.type.ParameterizedType; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import static io.codelaser.maddi.cst.api.analysis.Value.Independent; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.INDEPENDENT; +import static io.codelaser.maddi.modification.analyzer.CycleBreakingStrategy.NO_INFORMATION_IS_NON_MODIFYING; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; import java.util.ArrayList; import java.util.Arrays; @@ -45,12 +33,24 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; -import static io.codelaser.maddi.modification.analyzer.CycleBreakingStrategy.NO_INFORMATION_IS_NON_MODIFYING; -import static io.codelaser.maddi.cst.api.analysis.Value.Independent; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.INDEPENDENT; -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import io.codelaser.maddi.cst.api.analysis.Message; +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.info.FieldInfo; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.runtime.Runtime; +import io.codelaser.maddi.cst.api.type.ParameterizedType; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.TypeImmutableAnalyzer; +import io.codelaser.maddi.modification.analyzer.TypeIndependentAnalyzer; +import io.codelaser.maddi.modification.common.AnalysisHelper; +import io.codelaser.maddi.modification.common.defaults.ContractReader; +import io.codelaser.maddi.modification.common.util.TolerantWrite; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.variable.Link; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; /* Phase 4.1 Primary type independent diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeModIndyAnalyzerImpl.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeModIndyAnalyzerImpl.java index a97b289fe..f178dd02e 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeModIndyAnalyzerImpl.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeModIndyAnalyzerImpl.java @@ -17,17 +17,18 @@ package io.codelaser.maddi.modification.analyzer.impl; -import io.codelaser.maddi.modification.common.util.TolerantWrite; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.TypeModIndyAnalyzer; -import io.codelaser.maddi.modification.common.AnalysisHelper; -import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; -import io.codelaser.maddi.modification.common.util.Culprits; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.Util; -import io.codelaser.maddi.modification.prepwork.variable.Link; -import io.codelaser.maddi.modification.prepwork.variable.Links; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.*; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; + +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; + import io.codelaser.maddi.cst.api.analysis.Message; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.FieldInfo; @@ -41,18 +42,17 @@ import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; - -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.atomic.AtomicInteger; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.*; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.TypeModIndyAnalyzer; +import io.codelaser.maddi.modification.common.AnalysisHelper; +import io.codelaser.maddi.modification.common.util.Culprits; +import io.codelaser.maddi.modification.common.util.TolerantWrite; +import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.Util; +import io.codelaser.maddi.modification.prepwork.variable.Link; +import io.codelaser.maddi.modification.prepwork.variable.Links; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; /* Phase 3. diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/AnnotationPresence.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/AnnotationPresence.java index 790685c34..4f566c62e 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/AnnotationPresence.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/AnnotationPresence.java @@ -17,6 +17,10 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import java.util.List; +import java.util.function.Predicate; +import java.util.stream.Stream; + import io.codelaser.maddi.cst.api.element.Comment; import io.codelaser.maddi.cst.api.element.DetailedSources; import io.codelaser.maddi.cst.api.element.Element; @@ -29,10 +33,6 @@ import io.codelaser.maddi.cst.api.variable.DescendMode; import io.codelaser.maddi.cst.api.variable.Variable; -import java.util.List; -import java.util.function.Predicate; -import java.util.stream.Stream; - /** * A synthetic fact variable: annotation {@code annotationType} is PRESENT on {@code element}, established by * {@code element.isAnnotationPresent(X.class)} being true, so {@code element.getAnnotation(X.class)} is not the diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/CallResults.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/CallResults.java index 163ec70d2..614c1d853 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/CallResults.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/CallResults.java @@ -17,6 +17,19 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; + +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Deque; +import java.util.HashMap; +import java.util.HashSet; +import java.util.IdentityHashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.expression.Assignment; @@ -48,19 +61,6 @@ import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Deque; -import java.util.HashMap; -import java.util.HashSet; -import java.util.IdentityHashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; - /** * What a call's result stands for, as the walk reads a statement's values (syntacticSeeds): an analysed callee's * return, a library call that may return null, a factory's or a stream's elements, a library view of its receiver, diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Contracts.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Contracts.java index 45ad77c50..e2d6b3ed6 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Contracts.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Contracts.java @@ -17,6 +17,18 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.IdentityHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.expression.Assignment; import io.codelaser.maddi.cst.api.expression.BinaryOperator; @@ -42,18 +54,6 @@ import io.codelaser.maddi.cst.impl.analysis.NullAnnotations; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.IdentityHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; - /** * Declared and inferred non-null contracts: null stops at a node that has one. A source declaration's null * annotations (Policy.contracts), the library's (the analysis hints, the class files' annotations, a null-marked diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/GraphCompletion.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/GraphCompletion.java index 41ab602bb..41caaadfa 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/GraphCompletion.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/GraphCompletion.java @@ -17,6 +17,16 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + import io.codelaser.maddi.cst.api.expression.Assignment; import io.codelaser.maddi.cst.api.expression.ConstructorCall; import io.codelaser.maddi.cst.api.expression.Expression; @@ -36,16 +46,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; - /** * Phase 5 of {@link NullabilityPass}: the edges and seeds added once every method's body was walked: the keyed maps' * edges, the fields' default values and initializers, the generic holders' slots, the nulls in field initializers, diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Index.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Index.java index ff288de60..9b6437eb0 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Index.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Index.java @@ -17,6 +17,16 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.IdentityHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.expression.Assignment; import io.codelaser.maddi.cst.api.expression.ClassExpression; @@ -40,16 +50,6 @@ import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.FieldReference; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.IdentityHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; - /** * The read-only indexes of one round of the nullability pass, built before the graph (phase 1 of * {@link NullabilityPass}): the analysed methods and fields, the override families, the lambdas and method diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/KeyPresence.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/KeyPresence.java index 38d327718..24fbcf734 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/KeyPresence.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/KeyPresence.java @@ -17,6 +17,10 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import java.util.List; +import java.util.function.Predicate; +import java.util.stream.Stream; + import io.codelaser.maddi.cst.api.element.Comment; import io.codelaser.maddi.cst.api.element.DetailedSources; import io.codelaser.maddi.cst.api.element.Element; @@ -29,10 +33,6 @@ import io.codelaser.maddi.cst.api.variable.DescendMode; import io.codelaser.maddi.cst.api.variable.Variable; -import java.util.List; -import java.util.function.Predicate; -import java.util.stream.Stream; - /** * A synthetic variable for {@link NonNullFacts}: {@code map[key]}, "the key is present in the map", so that a lookup * is not the absent key's null (CodeLaser/maddi-mod#22 gap 1). Equal by the names of the two variables it is made of; typed diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/MethodWalker.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/MethodWalker.java index 1470f1ebb..ea8179bbe 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/MethodWalker.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/MethodWalker.java @@ -17,6 +17,15 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.IdentityHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.expression.And; import io.codelaser.maddi.cst.api.expression.ArrayInitializer; @@ -68,15 +77,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableInfoContainer; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.IdentityHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; - /** * Phase 4 of {@link NullabilityPass}: builds the graph for one method at a time. It walks the statements in their * block scopes, reads each statement's links into edges ({@link #linksOf}), counts the guarded ones, and at each diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NarrowedReads.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NarrowedReads.java index f6e62b5db..5d5da7c62 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NarrowedReads.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NarrowedReads.java @@ -17,14 +17,14 @@ package io.codelaser.maddi.modification.analyzer.nullability; -import io.codelaser.maddi.cst.api.info.FieldInfo; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static io.codelaser.maddi.modification.analyzer.nullability.Types.isSubtype; import java.util.Map; import java.util.Set; -import static io.codelaser.maddi.modification.analyzer.nullability.Types.isSubtype; +import io.codelaser.maddi.cst.api.info.FieldInfo; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; /** * Per final instance field, the concrete classes whose instances may hold null in it; per getter, its field. diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Narrowing.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Narrowing.java index ea405468e..97a1aa97f 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Narrowing.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Narrowing.java @@ -17,6 +17,10 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import java.util.List; +import java.util.function.Predicate; +import java.util.stream.Stream; + import io.codelaser.maddi.cst.api.element.Comment; import io.codelaser.maddi.cst.api.element.DetailedSources; import io.codelaser.maddi.cst.api.element.Element; @@ -30,10 +34,6 @@ import io.codelaser.maddi.cst.api.variable.DescendMode; import io.codelaser.maddi.cst.api.variable.Variable; -import java.util.List; -import java.util.function.Predicate; -import java.util.stream.Stream; - /** * A synthetic variable for {@link NonNullFacts}, for a read narrowed by the receiver's runtime type * (CodeLaser/maddi-mod#22 gap 3). Two kinds: diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Nodes.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Nodes.java index 652022cad..0ead7b2d8 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Nodes.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Nodes.java @@ -17,6 +17,15 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.expression.Assignment; import io.codelaser.maddi.cst.api.expression.Expression; @@ -35,15 +44,6 @@ import io.codelaser.maddi.modification.prepwork.Util; import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; - /** * What a variable or an expression of the walk stands for in the graph: a parameter (or a reassigned parameter's * shadow local), a field, a method's return, a {@link Local} resolved through the block scopes, an element or type diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NonNullFacts.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NonNullFacts.java index e322f3654..a284a978a 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NonNullFacts.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NonNullFacts.java @@ -17,26 +17,26 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.IdentityHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Function; + import io.codelaser.maddi.cst.api.expression.*; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.statement.*; import io.codelaser.maddi.cst.api.type.NullableState; +import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.DependentVariable; import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.LocalVariable; import io.codelaser.maddi.cst.api.variable.Variable; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.type.ParameterizedType; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.IdentityHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.function.Function; /** * The use-site pass (docs/design/nullability.md M4), first cut: per statement, the locals and parameters KNOWN diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullGraph.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullGraph.java index b93043449..b74c8668b 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullGraph.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullGraph.java @@ -17,22 +17,7 @@ package io.codelaser.maddi.modification.analyzer.nullability; -import io.codelaser.maddi.cst.api.element.Element; -import io.codelaser.maddi.cst.api.expression.Assignment; -import io.codelaser.maddi.cst.api.expression.ConstructorCall; -import io.codelaser.maddi.cst.api.expression.Lambda; -import io.codelaser.maddi.cst.api.expression.MethodCall; -import io.codelaser.maddi.cst.api.expression.VariableExpression; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; -import io.codelaser.maddi.cst.api.type.NullableState; -import io.codelaser.maddi.cst.api.variable.DependentVariable; -import io.codelaser.maddi.cst.api.expression.Expression; -import io.codelaser.maddi.cst.api.info.FieldInfo; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.type.ParameterizedType; -import io.codelaser.maddi.cst.api.variable.LocalVariable; +import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; import java.util.ArrayDeque; import java.util.ArrayList; @@ -46,7 +31,22 @@ import java.util.Map; import java.util.Set; -import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; +import io.codelaser.maddi.cst.api.element.Element; +import io.codelaser.maddi.cst.api.expression.Assignment; +import io.codelaser.maddi.cst.api.expression.ConstructorCall; +import io.codelaser.maddi.cst.api.expression.Expression; +import io.codelaser.maddi.cst.api.expression.Lambda; +import io.codelaser.maddi.cst.api.expression.MethodCall; +import io.codelaser.maddi.cst.api.expression.VariableExpression; +import io.codelaser.maddi.cst.api.info.FieldInfo; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; +import io.codelaser.maddi.cst.api.type.NullableState; +import io.codelaser.maddi.cst.api.type.ParameterizedType; +import io.codelaser.maddi.cst.api.variable.DependentVariable; +import io.codelaser.maddi.cst.api.variable.LocalVariable; /** * The graph of one round of the nullability pass: its nodes (fields, parameters, methods standing for their return, diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullPredicates.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullPredicates.java index 1fbf62ee7..6ee1ab0fd 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullPredicates.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullPredicates.java @@ -17,17 +17,17 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + import io.codelaser.maddi.cst.api.expression.*; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.statement.*; import io.codelaser.maddi.cst.api.variable.Variable; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - /** * Null-check predicates: boolean methods whose result tells whether an argument is null, such as * {@code StringUtils.isNotBlank(s)} (false when {@code s} is null, so true means non-null) or diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityComparison.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityComparison.java index 27ef19e78..bc19a2c04 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityComparison.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityComparison.java @@ -17,13 +17,13 @@ package io.codelaser.maddi.modification.analyzer.nullability; -import io.codelaser.maddi.cst.api.type.NullableState; -import io.codelaser.maddi.cst.api.type.ParameterizedType; - import java.util.EnumMap; import java.util.Map; import java.util.stream.Collectors; +import io.codelaser.maddi.cst.api.type.NullableState; +import io.codelaser.maddi.cst.api.type.ParameterizedType; + /** * Scores a nullability verdict against a reference, position by position: the type itself and, recursively, each * type argument (the value shape of {@code docs/design/nullability.md} §4.2 B2). The reference is what the source diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityPass.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityPass.java index ea24efc9d..3b63feae5 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityPass.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityPass.java @@ -17,7 +17,19 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.IdentityHashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + import io.codelaser.maddi.cst.api.analysis.Property; +import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.expression.Expression; import io.codelaser.maddi.cst.api.expression.MethodCall; @@ -27,7 +39,6 @@ import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.type.NullableState; import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.LocalVariable; @@ -36,17 +47,6 @@ import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.IdentityHashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; - /** * Declaration nullability as reachability over the converged link facts (docs/design/nullability.md §4.1, M3). * Modelled on {@code ShadowModificationPass}: a one-shot pass after the iterating analyzer has converged, so no diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/OutsideCallers.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/OutsideCallers.java index 48087af49..394425b5a 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/OutsideCallers.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/OutsideCallers.java @@ -17,9 +17,7 @@ package io.codelaser.maddi.modification.analyzer.nullability; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.type.ParameterizedType; +import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; import java.util.ArrayDeque; import java.util.Deque; @@ -27,7 +25,9 @@ import java.util.List; import java.util.Set; -import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.type.ParameterizedType; /** * {@link World#OPEN} and {@link World#OPEN_VISIBILITY}: the methods code outside the diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Preconditions.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Preconditions.java index a70b4aa83..1fcc7b366 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Preconditions.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Preconditions.java @@ -17,6 +17,16 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.IdentityHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.expression.Assignment; import io.codelaser.maddi.cst.api.expression.BinaryOperator; @@ -32,16 +42,6 @@ import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.api.type.ParameterizedType; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.IdentityHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; - /** * Parameters a null argument makes throw before their method completes (CodeLaser/maddi-mod#41), with the calls * that may pass null to one ({@link Report#nullArguments}); those declared non-null under diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/PureCall.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/PureCall.java index 79493904e..f16c9e976 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/PureCall.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/PureCall.java @@ -17,6 +17,10 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import java.util.List; +import java.util.function.Predicate; +import java.util.stream.Stream; + import io.codelaser.maddi.cst.api.element.Comment; import io.codelaser.maddi.cst.api.element.DetailedSources; import io.codelaser.maddi.cst.api.element.Element; @@ -30,10 +34,6 @@ import io.codelaser.maddi.cst.api.variable.DescendMode; import io.codelaser.maddi.cst.api.variable.Variable; -import java.util.List; -import java.util.function.Predicate; -import java.util.stream.Stream; - /** * {@code x.m()}, a synthetic variable for the result of a call to a non-modifying method without arguments on a * tracked variable (CodeLaser/maddi-mod#22 gap 8): known non-null after {@code x.m() != null}, so the same call diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/ReadNarrowing.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/ReadNarrowing.java index 06bef91d5..1943273d8 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/ReadNarrowing.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/ReadNarrowing.java @@ -17,6 +17,15 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + import io.codelaser.maddi.cst.api.expression.ArrayInitializer; import io.codelaser.maddi.cst.api.expression.Assignment; import io.codelaser.maddi.cst.api.expression.ConstantExpression; @@ -40,15 +49,6 @@ import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.modification.prepwork.Util; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; - /** * CodeLaser/maddi-mod#22 gap 3: a read of a final field narrowed by the receiver's runtime type. This round's * {@link NarrowedReads}, as {@link NonNullFacts} asks them ({@link #narrowedInMethod}), and the next round's, computed diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Report.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Report.java index c0d4b2e12..db9d9811b 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Report.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Report.java @@ -17,6 +17,11 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.expression.Expression; import io.codelaser.maddi.cst.api.info.FieldInfo; @@ -31,11 +36,6 @@ import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.cst.impl.analysis.NullabilityFacts; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - /** * @param verdicts fields, parameters, and methods (their return value) * @param locals every declared local variable, by its declaration diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Seeds.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Seeds.java index 217f3eed7..2b63aadb6 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Seeds.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Seeds.java @@ -17,6 +17,17 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + import io.codelaser.maddi.cst.api.expression.ArrayInitializer; import io.codelaser.maddi.cst.api.expression.Assignment; import io.codelaser.maddi.cst.api.expression.BinaryOperator; @@ -43,17 +54,6 @@ import io.codelaser.maddi.cst.api.variable.LocalVariable; import io.codelaser.maddi.cst.api.variable.Variable; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; - /** * Where null enters the graph: a seed is a node that may be null by itself, with its origin (the cause chains end * there), the types whose code writes the null, and whether it is a written null (strict) or indirect evidence. Also diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Tolerance.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Tolerance.java index 554632b06..4b3af30d5 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Tolerance.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Tolerance.java @@ -17,15 +17,7 @@ package io.codelaser.maddi.modification.analyzer.nullability; -import io.codelaser.maddi.cst.api.expression.VariableExpression; -import io.codelaser.maddi.cst.api.info.FieldInfo; -import io.codelaser.maddi.cst.impl.analysis.NullAnnotations; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.type.NullableState; -import io.codelaser.maddi.cst.api.type.ParameterizedType; -import io.codelaser.maddi.cst.api.variable.LocalVariable; -import io.codelaser.maddi.cst.api.variable.Variable; +import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; import java.util.ArrayDeque; import java.util.Deque; @@ -36,7 +28,15 @@ import java.util.Set; import java.util.stream.IntStream; -import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; +import io.codelaser.maddi.cst.api.expression.VariableExpression; +import io.codelaser.maddi.cst.api.info.FieldInfo; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.type.NullableState; +import io.codelaser.maddi.cst.api.type.ParameterizedType; +import io.codelaser.maddi.cst.api.variable.LocalVariable; +import io.codelaser.maddi.cst.api.variable.Variable; +import io.codelaser.maddi.cst.impl.analysis.NullAnnotations; /** * CodeLaser/maddi-mod#68: a parameter callable from outside whose body tolerates null on every path is nullable, diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Trace.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Trace.java index ede07338f..a550a3de5 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Trace.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Trace.java @@ -17,13 +17,13 @@ package io.codelaser.maddi.modification.analyzer.nullability; -import io.codelaser.maddi.cst.api.element.Element; -import io.codelaser.maddi.cst.api.info.Info; - import java.util.HashSet; import java.util.Map; import java.util.Set; +import io.codelaser.maddi.cst.api.element.Element; +import io.codelaser.maddi.cst.api.info.Info; + /** * The nullability pass's debugging output: every part prints through this one object, and only it reads the filter. *

diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/TypeUses.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/TypeUses.java index 4e2bcb5ed..7ce8fa8f0 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/TypeUses.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/TypeUses.java @@ -17,6 +17,15 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.expression.Cast; import io.codelaser.maddi.cst.api.expression.ConstructorCall; @@ -32,15 +41,6 @@ import io.codelaser.maddi.cst.api.type.NullableState; import io.codelaser.maddi.cst.api.type.ParameterizedType; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; - /** * Kotlin: the type parameters the null-marked code holds non-null ({@link Report#nonNullTypeParameter}), * from every type use of the analysed code: supertypes, declarations, bounds, and the types in the bodies, carried diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Types.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Types.java index 3ee00a640..f8c9f1322 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Types.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Types.java @@ -17,6 +17,10 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.expression.ConstructorCall; import io.codelaser.maddi.cst.api.expression.Expression; @@ -25,7 +29,11 @@ import io.codelaser.maddi.cst.api.expression.NullConstant; import io.codelaser.maddi.cst.api.expression.SwitchExpression; import io.codelaser.maddi.cst.api.expression.VariableExpression; +import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.statement.Block; import io.codelaser.maddi.cst.api.statement.BreakOrContinueStatement; import io.codelaser.maddi.cst.api.statement.ExpressionAsStatement; @@ -34,18 +42,11 @@ import io.codelaser.maddi.cst.api.statement.ThrowStatement; import io.codelaser.maddi.cst.api.statement.YieldStatement; import io.codelaser.maddi.cst.api.type.NullableState; +import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.DependentVariable; import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.cst.impl.analysis.NullAnnotations; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; -import io.codelaser.maddi.cst.api.info.FieldInfo; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.type.ParameterizedType; // static helpers the parts of the nullability pass share: about types, and about nodes regardless of the graph final class Types { diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Verdicts.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Verdicts.java index 99d698162..308b9e6b5 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Verdicts.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Verdicts.java @@ -17,6 +17,15 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + import io.codelaser.maddi.cst.api.expression.Assignment; import io.codelaser.maddi.cst.api.expression.Expression; import io.codelaser.maddi.cst.api.expression.MethodCall; @@ -30,15 +39,6 @@ import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.FieldReference; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; - /** * Phase 7 of {@link NullabilityPass}: a declaration's verdict from what null reached, and from what the outside * callers reached ({@link #verdict}); the values the use-site facts hand out as not nullable; Kotlin's parent class diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/shadow/ShadowModificationPass.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/shadow/ShadowModificationPass.java index eee5a0a40..032d89609 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/shadow/ShadowModificationPass.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/shadow/ShadowModificationPass.java @@ -1,20 +1,13 @@ package io.codelaser.maddi.modification.analyzer.shadow; -import io.codelaser.maddi.modification.common.AnalysisHelper; -import io.codelaser.maddi.modification.common.util.Culprits; -import io.codelaser.maddi.modification.common.util.OwnStaticState; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.link.impl.LinkVariable; -import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; -import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.Util; -import io.codelaser.maddi.modification.link.impl.PassedFunction; -import io.codelaser.maddi.modification.link.impl.ReceiverLevel; -import io.codelaser.maddi.modification.prepwork.variable.*; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableInfoImpl; -import io.codelaser.maddi.modification.prepwork.variable.ObjectCreationVariable; +import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.EMPTY_PART_OF_CONSTRUCTION; +import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.PART_OF_CONSTRUCTION; + +import java.util.*; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.codelaser.maddi.cst.api.analysis.PropertyValueMap; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.Element; @@ -35,16 +28,24 @@ import io.codelaser.maddi.cst.api.variable.LocalVariable; import io.codelaser.maddi.cst.api.variable.This; import io.codelaser.maddi.cst.api.variable.Variable; -import io.codelaser.maddi.modification.prepwork.variable.Stage; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.*; - -import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.EMPTY_PART_OF_CONSTRUCTION; -import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.PART_OF_CONSTRUCTION; +import io.codelaser.maddi.modification.common.AnalysisHelper; +import io.codelaser.maddi.modification.common.util.Culprits; +import io.codelaser.maddi.modification.common.util.OwnStaticState; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; +import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; +import io.codelaser.maddi.modification.link.impl.LinkVariable; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.link.impl.PassedFunction; +import io.codelaser.maddi.modification.link.impl.ReceiverLevel; +import io.codelaser.maddi.modification.prepwork.Util; +import io.codelaser.maddi.modification.prepwork.variable.*; +import io.codelaser.maddi.modification.prepwork.variable.ObjectCreationVariable; +import io.codelaser.maddi.modification.prepwork.variable.Stage; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableInfoImpl; /** * PLAN-modification-reachability phase 1: the shadow pass. Computes modification as one-shot diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/CommonTest.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/CommonTest.java index 6df39d41e..6f167c59b 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/CommonTest.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/CommonTest.java @@ -1,12 +1,22 @@ package io.codelaser.maddi.modification.analyzer; +import static io.codelaser.maddi.inspection.resource.SourceSetImpl.testProtocolSourceSet; +import static io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults.ANALYZED_RESULTS; + +import java.io.IOException; +import java.net.URI; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.slf4j.LoggerFactory; + import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.modification.analyzer.impl.ModAnalyzerForTesting; -import io.codelaser.maddi.modification.analyzer.impl.SingleIterationAnalyzerImpl; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -15,21 +25,12 @@ import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import io.codelaser.maddi.modification.analyzer.impl.ModAnalyzerForTesting; +import io.codelaser.maddi.modification.analyzer.impl.SingleIterationAnalyzerImpl; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; import io.codelaser.maddi.support.SetOnceMap; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.net.URI; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults.ANALYZED_RESULTS; -import static io.codelaser.maddi.inspection.resource.SourceSetImpl.testProtocolSourceSet; public abstract class CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/TestAnalysisProgressFeed.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/TestAnalysisProgressFeed.java index e8f5568d9..d4e2c7862 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/TestAnalysisProgressFeed.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/TestAnalysisProgressFeed.java @@ -17,11 +17,7 @@ package io.codelaser.maddi.modification.analyzer; -import io.codelaser.maddi.analysis.api.AnalysisValueFeed; - -import io.codelaser.maddi.cst.api.info.Info; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; +import static org.junit.jupiter.api.Assertions.*; import java.io.File; import java.nio.file.Files; @@ -29,7 +25,11 @@ import java.util.ArrayList; import java.util.List; -import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import io.codelaser.maddi.analysis.api.AnalysisValueFeed; +import io.codelaser.maddi.cst.api.info.Info; /** * Verify the instrument before trusting its numbers: the feed must sample heap and GC beans without diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/TestNoUndecidedAtEnd.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/TestNoUndecidedAtEnd.java index 28d823ff6..090bd9f95 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/TestNoUndecidedAtEnd.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/TestNoUndecidedAtEnd.java @@ -17,20 +17,21 @@ package io.codelaser.maddi.modification.analyzer; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.IOException; import java.util.ArrayList; import java.util.List; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * When the analyzer is done, nothing is left undecided — and that is what makes an ABSENT property in the diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestArrayVariable.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestArrayVariable.java index 8d7623612..6fd9e66e0 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestArrayVariable.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestArrayVariable.java @@ -18,10 +18,14 @@ package io.codelaser.maddi.modification.analyzer.clonebench; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; -import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.Assignment; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -32,13 +36,10 @@ import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.prepwork.variable.VariableData; +import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestArrayVariable extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestCastCharToInt.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestCastCharToInt.java index cd3c9263b..771ec1910 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestCastCharToInt.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestCastCharToInt.java @@ -17,15 +17,16 @@ package io.codelaser.maddi.modification.analyzer.clonebench; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; public class TestCastCharToInt extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestCloneBench.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestCloneBench.java index 623412b9a..a64c38812 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestCloneBench.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestCloneBench.java @@ -17,26 +17,9 @@ package io.codelaser.maddi.modification.analyzer.clonebench; -import io.codelaser.maddi.modification.common.CloneBenchCorpus; -import ch.qos.logback.classic.Level; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.modification.analyzer.impl.ModAnalyzerForTesting; -import io.codelaser.maddi.modification.analyzer.impl.SingleIterationAnalyzerImpl; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; -import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.cst.api.expression.MethodCall; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import io.codelaser.maddi.inspection.api.parser.Summary; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import static io.codelaser.maddi.inspection.resource.SourceSetImpl.testProtocolSourceSet; +import static io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults.ANALYZED_RESULTS; +import static org.junit.jupiter.api.Assertions.assertNotNull; import java.io.IOException; import java.net.URI; @@ -56,10 +39,28 @@ import java.util.concurrent.Future; import java.util.concurrent.atomic.AtomicInteger; -import static io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults.ANALYZED_RESULTS; -import static io.codelaser.maddi.inspection.resource.SourceSetImpl.testProtocolSourceSet; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import ch.qos.logback.classic.Level; +import io.codelaser.maddi.cst.api.element.SourceSet; +import io.codelaser.maddi.cst.api.expression.MethodCall; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import io.codelaser.maddi.inspection.api.parser.Summary; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import io.codelaser.maddi.modification.analyzer.impl.ModAnalyzerForTesting; +import io.codelaser.maddi.modification.analyzer.impl.SingleIterationAnalyzerImpl; +import io.codelaser.maddi.modification.common.CloneBenchCorpus; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; /* Corpus: "testarchive" (the former "analyzed" branch was merged into main on 2026-07-26). diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestConsumer.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestConsumer.java index dd547637c..0d3776f60 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestConsumer.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestConsumer.java @@ -17,14 +17,15 @@ package io.codelaser.maddi.modification.analyzer.clonebench; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; public class TestConsumer extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestEmptyBlock.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestEmptyBlock.java index 5704100d4..788c12c6f 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestEmptyBlock.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestEmptyBlock.java @@ -17,14 +17,15 @@ package io.codelaser.maddi.modification.analyzer.clonebench; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; public class TestEmptyBlock extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestGiantSwitchRepro.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestGiantSwitchRepro.java index 1a67d873c..997c92b3e 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestGiantSwitchRepro.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestGiantSwitchRepro.java @@ -1,15 +1,16 @@ package io.codelaser.maddi.modification.analyzer.clonebench; -import io.codelaser.maddi.modification.common.CloneBenchCorpus; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.junit.jupiter.api.Test; - import java.nio.file.Files; import java.nio.file.Path; import java.util.List; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.common.CloneBenchCorpus; + /* Performance regression guard for the Function18752956_file2311713 grind-to-halt (a ~100-arm switch in a loop: equal-quality witness ties are the COMMON case, and the witness-index tie-break/support machinery dominated). diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestHCSConstructor.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestHCSConstructor.java index 1256fbb34..1703f386a 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestHCSConstructor.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestHCSConstructor.java @@ -17,14 +17,15 @@ package io.codelaser.maddi.modification.analyzer.clonebench; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; public class TestHCSConstructor extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestHCTNotYetLoaded.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestHCTNotYetLoaded.java index 908be4290..7d7b0bfa5 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestHCTNotYetLoaded.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestHCTNotYetLoaded.java @@ -17,16 +17,15 @@ package io.codelaser.maddi.modification.analyzer.clonebench; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; - import java.math.BigInteger; import java.util.List; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; + +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; public class TestHCTNotYetLoaded extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestMessageDigestUpdate.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestMessageDigestUpdate.java index 8c79651df..58cec276d 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestMessageDigestUpdate.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestMessageDigestUpdate.java @@ -17,14 +17,15 @@ package io.codelaser.maddi.modification.analyzer.clonebench; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; public class TestMessageDigestUpdate extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestNeedMethodReturnTypeInHCT.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestNeedMethodReturnTypeInHCT.java index 422e4c6fb..c50213490 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestNeedMethodReturnTypeInHCT.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestNeedMethodReturnTypeInHCT.java @@ -17,21 +17,6 @@ package io.codelaser.maddi.modification.analyzer.clonebench; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; -import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.Statement; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.LinkedList; -import java.util.List; - import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.IMMUTABLE_HC; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.MUTABLE; @@ -39,6 +24,22 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertSame; +import java.util.LinkedList; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.prepwork.variable.VariableData; +import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; + public class TestNeedMethodReturnTypeInHCT extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestNullInHCSFindAll.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestNullInHCSFindAll.java index 2b31b1a0c..e87450cfa 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestNullInHCSFindAll.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestNullInHCSFindAll.java @@ -17,14 +17,15 @@ package io.codelaser.maddi.modification.analyzer.clonebench; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; public class TestNullInHCSFindAll extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestTypeParameterChoices.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestTypeParameterChoices.java index 343cde2e1..094d449ab 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestTypeParameterChoices.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestTypeParameterChoices.java @@ -17,17 +17,16 @@ package io.codelaser.maddi.modification.analyzer.clonebench; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import java.util.List; +import java.util.Properties; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; -import java.util.Properties; - -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; public class TestTypeParameterChoices extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestVarargs.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestVarargs.java index 03281fefd..e8b386513 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestVarargs.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestVarargs.java @@ -17,14 +17,15 @@ package io.codelaser.maddi.modification.analyzer.clonebench; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; public class TestVarargs extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestVarious.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestVarious.java index bf297caf1..a03f9c9e5 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestVarious.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestVarious.java @@ -17,24 +17,24 @@ package io.codelaser.maddi.modification.analyzer.clonebench; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.link.impl.localvar.MarkerVariable; import io.codelaser.maddi.modification.prepwork.variable.Link; import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.expression.NullConstant; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.Statement; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; public class TestVarious extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestVarious2.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestVarious2.java index e529295b6..c2d7afd07 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestVarious2.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestVarious2.java @@ -1,13 +1,14 @@ package io.codelaser.maddi.modification.analyzer.clonebench; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; public class TestVarious2 extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestVariousDependentVariableIssues.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestVariousDependentVariableIssues.java index dad644d07..850443396 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestVariousDependentVariableIssues.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestVariousDependentVariableIssues.java @@ -17,14 +17,15 @@ package io.codelaser.maddi.modification.analyzer.clonebench; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; public class TestVariousDependentVariableIssues extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestWarnForWrongIndependentHC.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestWarnForWrongIndependentHC.java index 57e53828a..2069611a8 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestWarnForWrongIndependentHC.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestWarnForWrongIndependentHC.java @@ -17,14 +17,15 @@ package io.codelaser.maddi.modification.analyzer.clonebench; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; public class TestWarnForWrongIndependentHC extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestCommitLabels.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestCommitLabels.java index ebe1e829d..fb131ae39 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestCommitLabels.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestCommitLabels.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.modification.analyzer.eventual; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.impl.EventualCluster; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.Set; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.impl.EventualCluster; /** * The {@code commitLabels} reframe of "eventually non-modifying" (EVENTUALCLUSTER only; handoff spec in diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestDynamicImmutabilityInference.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestDynamicImmutabilityInference.java index 8cb808245..bfa6daee4 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestDynamicImmutabilityInference.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestDynamicImmutabilityInference.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.modification.analyzer.eventual; -import io.codelaser.maddi.modification.analyzer.CommonTest; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * Part 2: inferring what a field HOLDS by following a defensive copy from the call site, through a constructor diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestDynamicImmutableReturn.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestDynamicImmutableReturn.java index 66576f7c0..e0161930f 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestDynamicImmutableReturn.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestDynamicImmutableReturn.java @@ -17,21 +17,22 @@ package io.codelaser.maddi.modification.analyzer.eventual; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.common.defaults.ContractReader; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.common.defaults.ContractReader; /** * Why a defensively-copying accessor does or does not lift its owner out of {@code @Dependent}. diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualClusterAssumptions.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualClusterAssumptions.java index 157507d43..e9efe68db 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualClusterAssumptions.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualClusterAssumptions.java @@ -17,18 +17,19 @@ package io.codelaser.maddi.modification.analyzer.eventual; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.impl.EventualCluster; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.Set; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.impl.EventualCluster; /** * Greatest-fixpoint, step 1: {@link EventualCluster} witnesses every optimistic decision. When diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualClusterContraction.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualClusterContraction.java index 7956c0db9..bc08a4146 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualClusterContraction.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualClusterContraction.java @@ -17,14 +17,15 @@ package io.codelaser.maddi.modification.analyzer.eventual; -import io.codelaser.maddi.modification.analyzer.impl.EventualClusterContraction; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.Map; import java.util.Set; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.modification.analyzer.impl.EventualClusterContraction; /** * Greatest-fixpoint, step 2: the contraction as pure set logic. {@link EventualClusterContraction#membersToRetract} diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualDominance.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualDominance.java index 9216d2575..b18b7c355 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualDominance.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualDominance.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.modification.analyzer.eventual; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.impl.EventualCluster; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.Set; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.impl.EventualCluster; /** * The DOMINANCE discipline of {@code computeEventual}'s propagation step ({@code SideWalk}): a sided call diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualNeedsAMark.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualNeedsAMark.java index f1c831b1f..f857dbce8 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualNeedsAMark.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualNeedsAMark.java @@ -17,6 +17,14 @@ package io.codelaser.maddi.modification.analyzer.eventual; +import static org.junit.jupiter.api.Assertions.assertFalse; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -24,13 +32,6 @@ import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.SingleIterationAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertFalse; /** * No mark, no eventual verdict. vavr's {@code MatchError}: a {@code @FinalFields} type (there its Throwable super caps diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualPropagation.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualPropagation.java index 9916eb2a8..724da6653 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualPropagation.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualPropagation.java @@ -17,21 +17,22 @@ package io.codelaser.maddi.modification.analyzer.eventual; -import io.codelaser.maddi.modification.analyzer.CommonTest; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; +import java.util.Set; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * Stage 2 of eventual immutability (road to immutability §060; plan in {@code docs/design/eventual-immutability.md}): diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualProtectedCarrier.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualProtectedCarrier.java index 81f627661..928560729 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualProtectedCarrier.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualProtectedCarrier.java @@ -17,20 +17,21 @@ package io.codelaser.maddi.modification.analyzer.eventual; -import io.codelaser.maddi.modification.analyzer.CommonTest; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * The {@code BinaryOperatorImpl} shape of the dogfood (quest R, 2026-08-03): an abstract base holding diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualSharedContent.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualSharedContent.java index a552fa608..4425ad75c 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualSharedContent.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualSharedContent.java @@ -17,20 +17,21 @@ package io.codelaser.maddi.modification.analyzer.eventual; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.CommonTest; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; /** * After the mark, what an argument or a return value SHARES decides, not its own type (CodeLaser/maddi#51). The shape of diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventuallyUnmodifiedParameter.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventuallyUnmodifiedParameter.java index 9ff459f90..a377bc5a0 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventuallyUnmodifiedParameter.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventuallyUnmodifiedParameter.java @@ -17,20 +17,21 @@ package io.codelaser.maddi.modification.analyzer.eventual; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.impl.EventualCluster; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; + +import java.util.Set; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.impl.EventualCluster; /** * {@code EVENTUALLY_UNMODIFIED_PARAMETER} (spec: {@code docs/design/spec-eventually-unmodified-parameter.md}), the diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestRootAccessorCommitment.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestRootAccessorCommitment.java index d6ecaedf3..f52cc110c 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestRootAccessorCommitment.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestRootAccessorCommitment.java @@ -17,6 +17,15 @@ package io.codelaser.maddi.modification.analyzer.eventual; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; + +import java.util.Set; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; @@ -24,14 +33,6 @@ import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.EventualCluster; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; /** * The {@code ParameterizedTypeImpl.isJavaUtilList()} shape (dogfood keystone {@code ParameterizedType}, diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/faulttolerance/TestFaultIsolation.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/faulttolerance/TestFaultIsolation.java index ac7389c74..1f037a390 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/faulttolerance/TestFaultIsolation.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/faulttolerance/TestFaultIsolation.java @@ -17,25 +17,26 @@ package io.codelaser.maddi.modification.analyzer.faulttolerance; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.modification.analyzer.impl.SingleIterationAnalyzerImpl; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.analysis.Message; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Set; -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.*; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Message; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import io.codelaser.maddi.modification.analyzer.impl.SingleIterationAnalyzerImpl; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** * Fault isolation (hardening roadmap §2): a crash while analyzing one {@code Info} is recorded as an ERROR finding diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerDegraded.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerDegraded.java index d7838607c..080ca7126 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerDegraded.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerDegraded.java @@ -1,23 +1,24 @@ package io.codelaser.maddi.modification.analyzer.field; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; public class TestFieldAnalyzerDegraded extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerFieldOfCallResult.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerFieldOfCallResult.java index 4b9e8bcc1..9daf65ae7 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerFieldOfCallResult.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerFieldOfCallResult.java @@ -1,23 +1,23 @@ package io.codelaser.maddi.modification.analyzer.field; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.IOException; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; public class TestFieldAnalyzerFieldOfCallResult extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerFinalField.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerFinalField.java index 49fffa98c..74832a40a 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerFinalField.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerFinalField.java @@ -1,19 +1,20 @@ package io.codelaser.maddi.modification.analyzer.field; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.prepwork.variable.Links; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.info.*; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.info.*; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.prepwork.variable.Links; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; public class TestFieldAnalyzerFinalField extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerParameterPart.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerParameterPart.java index 97ea40d36..031aa1a4b 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerParameterPart.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerParameterPart.java @@ -1,22 +1,23 @@ package io.codelaser.maddi.modification.analyzer.field; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; public class TestFieldAnalyzerParameterPart extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerReadInCondition.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerReadInCondition.java index 55b04e470..be990824b 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerReadInCondition.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerReadInCondition.java @@ -1,22 +1,23 @@ package io.codelaser.maddi.modification.analyzer.field; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; public class TestFieldAnalyzerReadInCondition extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestContainerContractUnderReachability.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestContainerContractUnderReachability.java index 353d22c8b..b2c0859e6 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestContainerContractUnderReachability.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestContainerContractUnderReachability.java @@ -1,5 +1,12 @@ package io.codelaser.maddi.modification.analyzer.guard; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -7,12 +14,6 @@ import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertTrue; /** * An authored {@code @Container} on an interface is a contract on every parameter of its bodiless methods, as an diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestContractOnAbstractMethod.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestContractOnAbstractMethod.java index 68bfeb9ab..6f7794aed 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestContractOnAbstractMethod.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestContractOnAbstractMethod.java @@ -17,6 +17,17 @@ package io.codelaser.maddi.modification.analyzer.guard; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.IOException; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Message; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.Info; @@ -28,16 +39,6 @@ import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; import io.codelaser.maddi.modification.analyzer.impl.GuardAnalyzerImpl; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; /** * An annotation on a method of an ABSTRACT type is a contract, and must reach {@code analysis()}. diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestContractOnAbstractParameter.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestContractOnAbstractParameter.java index 8542fd760..f4f423b7c 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestContractOnAbstractParameter.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestContractOnAbstractParameter.java @@ -17,6 +17,16 @@ package io.codelaser.maddi.modification.analyzer.guard; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.IOException; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Message; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.Info; @@ -28,15 +38,6 @@ import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; /** * The PARAMETER half of {@link TestContractOnAbstractMethod}: {@code @NotModified} on a parameter of a BODILESS diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardContainer.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardContainer.java index e63194e6a..92f72ce02 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardContainer.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardContainer.java @@ -1,20 +1,21 @@ package io.codelaser.maddi.modification.analyzer.guard; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.GuardAnalyzerImpl; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.cst.api.analysis.Message; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.io.IOException; import java.util.List; -import static org.junit.jupiter.api.Assertions.*; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Message; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.impl.GuardAnalyzerImpl; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * Guard mode, first scenario from the design doc: the user contracts an interface to be @Container; diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardDynamicImmutable.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardDynamicImmutable.java index d512d795b..13a44805e 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardDynamicImmutable.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardDynamicImmutable.java @@ -17,24 +17,25 @@ package io.codelaser.maddi.modification.analyzer.guard; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.GuardAnalyzerImpl; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Message; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.impl.GuardAnalyzerImpl; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * Policing the dynamic-immutability contract now that it decides verdicts. diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardHierarchy.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardHierarchy.java index 67c27ac3e..9a046c84c 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardHierarchy.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardHierarchy.java @@ -1,20 +1,21 @@ package io.codelaser.maddi.modification.analyzer.guard; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.GuardAnalyzerImpl; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.cst.api.analysis.Message; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.io.IOException; import java.util.List; -import static org.junit.jupiter.api.Assertions.*; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Message; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.impl.GuardAnalyzerImpl; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * Guard mode, hierarchy monotonicity: a subclass override may not weaken a contract carried by a concrete diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardIgnoreModifications.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardIgnoreModifications.java index 746074480..5c60e3cee 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardIgnoreModifications.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardIgnoreModifications.java @@ -17,21 +17,22 @@ package io.codelaser.maddi.modification.analyzer.guard; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.GuardAnalyzerImpl; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.cst.api.analysis.Message; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.io.IOException; import java.util.List; -import static org.junit.jupiter.api.Assertions.*; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Message; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.impl.GuardAnalyzerImpl; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * The confinement guard, field-granularity separation arm (road-to-immutability 050, "Ignoring modifications as diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardImmutable.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardImmutable.java index 010fcb05c..6f75bf9ec 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardImmutable.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardImmutable.java @@ -1,20 +1,21 @@ package io.codelaser.maddi.modification.analyzer.guard; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.GuardAnalyzerImpl; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.cst.api.analysis.Message; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.io.IOException; import java.util.List; -import static org.junit.jupiter.api.Assertions.*; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Message; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.impl.GuardAnalyzerImpl; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * Guard mode, {@code @Immutable} on a type: the rules of immutability (§050) are verified one by one, so that a diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardIndependent.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardIndependent.java index 8e8eab155..ac0c9a081 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardIndependent.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardIndependent.java @@ -1,20 +1,21 @@ package io.codelaser.maddi.modification.analyzer.guard; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.GuardAnalyzerImpl; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.cst.api.analysis.Message; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.io.IOException; import java.util.List; -import static org.junit.jupiter.api.Assertions.*; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Message; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.impl.GuardAnalyzerImpl; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * Guard mode, second contract kind: {@code @Independent} on an abstract method — every implementation must not be diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardIndependentType.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardIndependentType.java index daed91d0b..8fba83905 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardIndependentType.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestGuardIndependentType.java @@ -1,20 +1,21 @@ package io.codelaser.maddi.modification.analyzer.guard; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.GuardAnalyzerImpl; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.cst.api.analysis.Message; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.io.IOException; import java.util.List; -import static org.junit.jupiter.api.Assertions.*; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Message; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.impl.GuardAnalyzerImpl; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * Guard mode, {@code @Independent} on a type (§080): external modifications must not reach the accessible content. diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestNearMissContainer.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestNearMissContainer.java index feaef3332..acf8ff5fd 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestNearMissContainer.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestNearMissContainer.java @@ -17,22 +17,23 @@ package io.codelaser.maddi.modification.analyzer.guard; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Message; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer.NearMissPolicy; import io.codelaser.maddi.modification.analyzer.impl.GuardAnalyzerImpl; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.cst.api.analysis.Message; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; /** * Near-miss warnings: the mirror image of the guard. No {@code @Container} is written, the computed diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestNearMissMethod.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestNearMissMethod.java index 411da82c8..93d033e9b 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestNearMissMethod.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestNearMissMethod.java @@ -17,21 +17,22 @@ package io.codelaser.maddi.modification.analyzer.guard; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.GuardAnalyzerImpl; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.cst.api.analysis.Message; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.io.IOException; import java.util.List; -import static org.junit.jupiter.api.Assertions.*; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Message; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.impl.GuardAnalyzerImpl; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * Method-level near-misses: an abstract method one implementation short of being contractable {@code @NotModified} diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestNearMissType.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestNearMissType.java index 2cde335bf..cab90654d 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestNearMissType.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/guard/TestNearMissType.java @@ -17,21 +17,22 @@ package io.codelaser.maddi.modification.analyzer.guard; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.GuardAnalyzerImpl; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.cst.api.analysis.Message; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.io.IOException; import java.util.List; -import static org.junit.jupiter.api.Assertions.*; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Message; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.impl.GuardAnalyzerImpl; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * Type-level immutability near-misses: a class one field short of {@code @Immutable} or {@code @Independent}. The diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestAnalysisTimeBudget.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestAnalysisTimeBudget.java index c87e6d9b2..7109313be 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestAnalysisTimeBudget.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestAnalysisTimeBudget.java @@ -17,24 +17,25 @@ package io.codelaser.maddi.modification.analyzer.integration; +import static org.junit.jupiter.api.Assertions.*; + +import java.time.Duration; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.analysis.api.AnalysisValueFeed; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.AnalysisBudgetExceededException; -import io.codelaser.maddi.analysis.api.AnalysisValueFeed; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.time.Duration; -import java.util.Collection; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; - -import static org.junit.jupiter.api.Assertions.*; /** * Gap {@code G43} (OpenSearch campaign, 2026-08-26): {@code MODIFICATION_ANALYSIS} ran for 1 hour 40 minutes at diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestAnalysisValueFeed.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestAnalysisValueFeed.java index ac12169e7..940ba0a52 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestAnalysisValueFeed.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestAnalysisValueFeed.java @@ -17,20 +17,21 @@ package io.codelaser.maddi.modification.analyzer.integration; -import io.codelaser.maddi.analysis.api.AnalysisValueFeed; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.cst.api.info.Info; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.util.ArrayList; import java.util.Collection; import java.util.List; -import static org.junit.jupiter.api.Assertions.*; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.analysis.api.AnalysisValueFeed; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * The streaming seam for the IDE daemon (see {@link AnalysisValueFeed}): pass boundaries deliver the diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestBookIndependenceOfSupportTypes.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestBookIndependenceOfSupportTypes.java index ce9b6815b..1ef055f60 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestBookIndependenceOfSupportTypes.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestBookIndependenceOfSupportTypes.java @@ -17,24 +17,25 @@ package io.codelaser.maddi.modification.analyzer.integration; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.List; - import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_FIELD; import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_METHOD; import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_PARAMETER; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; import static org.junit.jupiter.api.Assertions.assertEquals; +import java.util.ArrayList; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; + /** * Does the analyzer still compute {@code @Independent(hc=true)} where The Road to Immutability chapter 12 * prints it? diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestCheckpointResume.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestCheckpointResume.java index 9f53badd7..58a96af8f 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestCheckpointResume.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestCheckpointResume.java @@ -17,20 +17,7 @@ package io.codelaser.maddi.modification.analyzer.integration; -import io.codelaser.maddi.analysis.api.AnalysisValueFeed; -import io.codelaser.maddi.modification.analyzer.CheckpointWriter; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.modification.link.io.LinkCodec; -import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.io.File; import java.io.IOException; @@ -39,7 +26,21 @@ import java.util.List; import java.util.Map; -import static org.junit.jupiter.api.Assertions.*; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.analysis.api.AnalysisValueFeed; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.modification.analyzer.CheckpointWriter; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import io.codelaser.maddi.modification.link.io.LinkCodec; +import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; /** * Task #34 (checkpoint/resume v1): the {@link CheckpointWriter} persists analyzed values at pass diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestClearBeforeRecomputeHook.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestClearBeforeRecomputeHook.java index 3c05d7aac..fcd331f2e 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestClearBeforeRecomputeHook.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestClearBeforeRecomputeHook.java @@ -17,17 +17,7 @@ package io.codelaser.maddi.modification.analyzer.integration; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.callgraph.ComputeCallGraph; -import io.codelaser.maddi.cst.api.analysis.Property; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.graph.G; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.util.ArrayList; import java.util.List; @@ -35,7 +25,18 @@ import java.util.function.Consumer; import java.util.function.Predicate; -import static org.junit.jupiter.api.Assertions.*; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.callgraph.ComputeCallGraph; +import io.codelaser.maddi.cst.api.analysis.Property; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.graph.G; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * The clear-before-recompute hook of {@link IteratingAnalyzer#analyze(List, G, Set, Consumer)}: in incremental mode diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestExposedView.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestExposedView.java index abf8c04a0..d9f645737 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestExposedView.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestExposedView.java @@ -17,20 +17,21 @@ package io.codelaser.maddi.modification.analyzer.integration; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.CommonTest; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; -import static org.junit.jupiter.api.Assertions.assertEquals; /** * A getter that hands out a view of a field shares the field's mutable object with the caller, exactly as one that diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestExtensibleHiddenContent.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestExtensibleHiddenContent.java index d853f1687..c18946cd2 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestExtensibleHiddenContent.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestExtensibleHiddenContent.java @@ -17,21 +17,22 @@ package io.codelaser.maddi.modification.analyzer.integration; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_TYPE; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_TYPE; -import static org.junit.jupiter.api.Assertions.assertEquals; /** * CodeLaser/maddi-mod#81: a parameterized type's hidden content is replaced by its type arguments' immutability only diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestImmutable.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestImmutable.java index 7f139f59d..ec914eaf0 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestImmutable.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestImmutable.java @@ -17,8 +17,17 @@ package io.codelaser.maddi.modification.analyzer.integration; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.MUTABLE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; @@ -26,16 +35,7 @@ import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.MUTABLE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.analyzer.CommonTest; public class TestImmutable extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestIndependentOfByteArray.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestIndependentOfByteArray.java index bc062a409..084435987 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestIndependentOfByteArray.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestIndependentOfByteArray.java @@ -18,28 +18,29 @@ package io.codelaser.maddi.modification.analyzer.integration; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; -import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_PARAMETER; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.statement.IfElseStatement; import io.codelaser.maddi.cst.api.statement.Statement; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_PARAMETER; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.variable.VariableData; +import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestIndependentOfByteArray extends CommonTest { @Language("java") diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestIndependentOfEnum.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestIndependentOfEnum.java index cbf407cb0..6cc37e0bc 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestIndependentOfEnum.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestIndependentOfEnum.java @@ -18,22 +18,23 @@ package io.codelaser.maddi.modification.analyzer.integration; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.FieldInfo; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE; import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_TYPE; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; import static org.junit.jupiter.api.Assertions.*; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.FieldInfo; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.analyzer.CommonTest; + public class TestIndependentOfEnum extends CommonTest { @Language("java") private static final String INPUT1 = """ diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestIntegration1.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestIntegration1.java index e16be2fad..f56b3ed54 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestIntegration1.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestIntegration1.java @@ -17,14 +17,15 @@ package io.codelaser.maddi.modification.analyzer.integration; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; public class TestIntegration1 extends CommonTest { @Language("java") diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestIntegration2.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestIntegration2.java index 68aa11049..47db1a94d 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestIntegration2.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestIntegration2.java @@ -17,14 +17,15 @@ package io.codelaser.maddi.modification.analyzer.integration; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; public class TestIntegration2 extends CommonTest { @Language("java") diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestIntegration3.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestIntegration3.java index 7ee5bf792..08eb15859 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestIntegration3.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestIntegration3.java @@ -17,21 +17,22 @@ package io.codelaser.maddi.modification.analyzer.integration; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; -import io.codelaser.maddi.modification.link.vf.VirtualFields; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; +import io.codelaser.maddi.modification.link.vf.VirtualFields; public class TestIntegration3 extends CommonTest { private static final Logger LOGGER = LoggerFactory.getLogger(TestIntegration3.class); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestLazyShapeIndependence.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestLazyShapeIndependence.java index 81dc426ee..b05f024ad 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestLazyShapeIndependence.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestLazyShapeIndependence.java @@ -17,16 +17,17 @@ package io.codelaser.maddi.modification.analyzer.integration; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.modification.analyzer.CommonTest; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_METHOD; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_METHOD; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * Seven ways to write "return the lazily initialised value", all with the same answer. diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestLinkConstructorInMethodCall.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestLinkConstructorInMethodCall.java index 5ca988bd4..058a37522 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestLinkConstructorInMethodCall.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestLinkConstructorInMethodCall.java @@ -18,29 +18,30 @@ package io.codelaser.maddi.modification.analyzer.integration; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.variable.*; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.*; -import io.codelaser.maddi.cst.api.statement.Statement; -import io.codelaser.maddi.cst.api.variable.Variable; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.*; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.*; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl.LINKS; +import static org.junit.jupiter.api.Assertions.*; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl.LINKS; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.*; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.*; -import static org.junit.jupiter.api.Assertions.*; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.*; +import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.cst.api.variable.Variable; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.variable.*; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; // only difference between test1 and test2 is in the 'withException' method, // one 1 line, or on 2 lines diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestSeededIncrementalAnalysis.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestSeededIncrementalAnalysis.java index c5d4a66cf..cc7d4b770 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestSeededIncrementalAnalysis.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestSeededIncrementalAnalysis.java @@ -17,24 +17,25 @@ package io.codelaser.maddi.modification.analyzer.integration; -import io.codelaser.maddi.analysis.api.AnalysisValueFeed; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.callgraph.ComputeCallGraph; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.graph.G; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Set; -import static org.junit.jupiter.api.Assertions.*; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.analysis.api.AnalysisValueFeed; +import io.codelaser.maddi.callgraph.ComputeCallGraph; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.graph.G; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * The incremental early-cutoff entry point {@link IteratingAnalyzer#analyze(List, G, Set)}: when seeded with a diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestTypeNullBreaking.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestTypeNullBreaking.java index e37ca6ed6..8e69eeef7 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestTypeNullBreaking.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestTypeNullBreaking.java @@ -17,21 +17,22 @@ package io.codelaser.maddi.modification.analyzer.integration; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * The 51% type-null cluster (elasticsearch first contact): nullness roots in verdicts that never diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/io/TestWriteAnalysisSyntheticFields.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/io/TestWriteAnalysisSyntheticFields.java index 674dfcbbe..ba96577ea 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/io/TestWriteAnalysisSyntheticFields.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/io/TestWriteAnalysisSyntheticFields.java @@ -17,6 +17,25 @@ package io.codelaser.maddi.modification.analyzer.io; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.cst.api.analysis.Codec; +import io.codelaser.maddi.cst.api.info.FieldInfo; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; import io.codelaser.maddi.modification.link.io.LinkCodec; @@ -24,25 +43,7 @@ import io.codelaser.maddi.modification.prepwork.io.WriteAnalysisResults; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; -import io.codelaser.maddi.cst.api.analysis.Codec; -import io.codelaser.maddi.cst.api.info.FieldInfo; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.util.Trie; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.util.List; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; public class TestWriteAnalysisSyntheticFields extends CommonTest { private static final Logger LOGGER = LoggerFactory.getLogger(TestWriteAnalysisSyntheticFields.class); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/io/TestWriteAnalysisUnnamedPackage.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/io/TestWriteAnalysisUnnamedPackage.java index 9f477b1c8..d4b8c5a10 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/io/TestWriteAnalysisUnnamedPackage.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/io/TestWriteAnalysisUnnamedPackage.java @@ -17,29 +17,30 @@ package io.codelaser.maddi.modification.analyzer.io; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Codec; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; import io.codelaser.maddi.modification.link.io.LinkCodec; import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; import io.codelaser.maddi.modification.prepwork.io.WriteAnalysisResults; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.cst.api.analysis.Codec; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.util.Trie; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.File; -import java.io.IOException; -import java.util.List; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; /** * A type in the unnamed package, written out with the trie keyed by package name. diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/CommonKotlinAnalyzerTest.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/CommonKotlinAnalyzerTest.java index 1d2c12fda..d0ae4b330 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/CommonKotlinAnalyzerTest.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/CommonKotlinAnalyzerTest.java @@ -1,5 +1,19 @@ package io.codelaser.maddi.modification.analyzer.kotlin; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.jupiter.api.BeforeAll; + +import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.SourceSet; @@ -20,20 +34,7 @@ import io.codelaser.maddi.kotlin.api.PlaceholderCensus; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; -import org.junit.jupiter.api.BeforeAll; - -import java.io.IOException; -import java.io.UncheckedIOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static org.junit.jupiter.api.Assertions.assertEquals; /* The modification analyzer on KOTLIN input, from inside the analyzer module. Every fixture is a pair: Kotlin sources diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerCollections.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerCollections.java index febb51a26..7c889cfd8 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerCollections.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerCollections.java @@ -1,12 +1,13 @@ package io.codelaser.maddi.modification.analyzer.kotlin; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; /* Defensive copies. A Kotlin class that keeps `xs.toList()` keeps a copy, but not an immutable one: toList/toSet/toMap diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerConstruction.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerConstruction.java index d4788fdd9..08fe7adb2 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerConstruction.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerConstruction.java @@ -1,11 +1,11 @@ package io.codelaser.maddi.modification.analyzer.kotlin; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; - /* How a Kotlin object is constructed, and what that does to the verdicts: a constructor property, a property initializer that reads a constructor parameter, an `init` block, and a vararg property. kotlinc emits all of these diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerControl.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerControl.java index 0c6834939..3d85055bb 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerControl.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerControl.java @@ -1,11 +1,11 @@ package io.codelaser.maddi.modification.analyzer.kotlin; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; - /* Control and declaration shapes that kotlinc lowers: safe calls, elvis and `!!`, `when` with `is` arms (smart casts), destructuring a map entry in a for loop, `buildList`, a local function, interface and abstract properties, a nested diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerEnumEntries.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerEnumEntries.java index 28502f8cd..842b13a7e 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerEnumEntries.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerEnumEntries.java @@ -1,13 +1,14 @@ package io.codelaser.maddi.modification.analyzer.kotlin; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.List; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; /* A bare `entries` in a member of its own enum is the static `Color.getEntries()`. The front end read it on `this`, diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerMethods.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerMethods.java index 3642beb47..4fc5c7652 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerMethods.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerMethods.java @@ -1,13 +1,14 @@ package io.codelaser.maddi.modification.analyzer.kotlin; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; /* Method-level verdicts: a fluent builder (with and without a scope function), an identity method, modification of a diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerSuspend.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerSuspend.java index e346a4766..d46f3fd59 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerSuspend.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerSuspend.java @@ -1,12 +1,12 @@ package io.codelaser.maddi.modification.analyzer.kotlin; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; /* Coroutines as far as kotlin-stdlib reaches (no kotlinx.coroutines on this class path): `suspend` functions, which diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerSynthesized.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerSynthesized.java index 66b9380e1..352629a88 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerSynthesized.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerSynthesized.java @@ -1,12 +1,12 @@ package io.codelaser.maddi.modification.analyzer.kotlin; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; /* What kotlinc synthesizes and the idioms that compile to it: class delegation (a `$$delegate_0` field and one diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerTypes.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerTypes.java index 28c4d7331..286f35256 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerTypes.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/TestKotlinAnalyzerTypes.java @@ -1,11 +1,11 @@ package io.codelaser.maddi.modification.analyzer.kotlin; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; - /* Type-level verdicts on Kotlin's type shapes: an immutable value class, a mutable counter, a collection holder, a generic box, a sealed hierarchy, an open class with an override, an inner class, `lateinit`, an `object`, an enum, diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/link/TestLinkFacts.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/link/TestLinkFacts.java index 0189dfdd8..463b8adb4 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/link/TestLinkFacts.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/link/TestLinkFacts.java @@ -17,6 +17,18 @@ package io.codelaser.maddi.modification.analyzer.link; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; +import java.util.stream.Collectors; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; @@ -26,17 +38,6 @@ import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.link.impl.LinkFactsImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; -import java.util.stream.Collectors; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * {@link LinkFactsImpl}: what a method's return links say about its result, for the Rust printer (an owned value or diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/method/TestDelegatingUnion.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/method/TestDelegatingUnion.java index d06c4145b..3542ad64e 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/method/TestDelegatingUnion.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/method/TestDelegatingUnion.java @@ -17,6 +17,14 @@ package io.codelaser.maddi.modification.analyzer.method; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -24,13 +32,6 @@ import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * Option C of the O4 work (2026-09-26): a union over implementations that is only held down by implementations diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/method/TestFluent.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/method/TestFluent.java index ea8da26a8..943018445 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/method/TestFluent.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/method/TestFluent.java @@ -17,12 +17,17 @@ package io.codelaser.maddi.modification.analyzer.method; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; -import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; @@ -32,16 +37,12 @@ import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import io.codelaser.maddi.modification.prepwork.variable.VariableData; +import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestFluent extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/method/TestIdentity.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/method/TestIdentity.java index 925ac3c79..5b5333f02 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/method/TestIdentity.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/method/TestIdentity.java @@ -17,6 +17,23 @@ package io.codelaser.maddi.modification.analyzer.method; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; +import java.util.Objects; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.expression.MethodCall; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.TryStatement; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; @@ -26,22 +43,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.expression.MethodCall; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.TryStatement; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.Objects; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.*; public class TestIdentity extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/method/TestLambda.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/method/TestLambda.java index bd51d941a..d7639a480 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/method/TestLambda.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/method/TestLambda.java @@ -1,10 +1,14 @@ package io.codelaser.maddi.modification.analyzer.method; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; -import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static io.codelaser.maddi.modification.link.impl.LinkComputerImpl.VARIABLES_LINKED_TO_OBJECT; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.Lambda; import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.info.Info; @@ -14,14 +18,10 @@ import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static io.codelaser.maddi.modification.link.impl.LinkComputerImpl.VARIABLES_LINKED_TO_OBJECT; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.prepwork.variable.VariableData; +import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestLambda extends CommonTest { @Language("java") diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestBreakVariable.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestBreakVariable.java index b524a0b30..e11a56081 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestBreakVariable.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestBreakVariable.java @@ -17,16 +17,15 @@ package io.codelaser.maddi.modification.analyzer.modification; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; public class TestBreakVariable extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestBridgeLinkDrop.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestBridgeLinkDrop.java index 64f239f6f..eb5d03239 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestBridgeLinkDrop.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestBridgeLinkDrop.java @@ -17,21 +17,22 @@ package io.codelaser.maddi.modification.analyzer.modification; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; /** * Task #43 (immutability-transform-divergence.md): in-repo reproduction of the loop-transform diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestBuilderFieldAssignment.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestBuilderFieldAssignment.java index 53edf702c..1292d36ae 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestBuilderFieldAssignment.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestBuilderFieldAssignment.java @@ -17,18 +17,19 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * CodeLaser/maddi-mod#24 R2. A fluent builder setter assigns its argument to a field and returns {@code this}. The diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestCapturedDelegate.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestCapturedDelegate.java index 821362de0..2ffa6e20e 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestCapturedDelegate.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestCapturedDelegate.java @@ -17,6 +17,15 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; +import java.util.concurrent.atomic.AtomicReference; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.ConstructorCall; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -27,14 +36,6 @@ import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.concurrent.atomic.AtomicReference; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * CodeLaser/maddi-mod#39, guava's Forwarding shape. {@code delegate()} is abstract, and its only implementation is an diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestCast.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestCast.java index 05446be15..d4057c7b6 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestCast.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestCast.java @@ -1,14 +1,16 @@ package io.codelaser.maddi.modification.analyzer.modification; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.io.DecoratorImpl; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.modification.prepwork.variable.Stage; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; -import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableInfoImpl; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.DOWNCAST_PARAMETER; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.SetOfTypeInfoImpl.EMPTY; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.Info; @@ -18,16 +20,15 @@ import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.DOWNCAST_PARAMETER; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.SetOfTypeInfoImpl.EMPTY; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.io.DecoratorImpl; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import io.codelaser.maddi.modification.prepwork.variable.Stage; +import io.codelaser.maddi.modification.prepwork.variable.VariableData; +import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableInfoImpl; public class TestCast extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestCopyConstructorIndependence.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestCopyConstructorIndependence.java index f0e6204f8..b0ab6d31d 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestCopyConstructorIndependence.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestCopyConstructorIndependence.java @@ -1,5 +1,13 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -8,13 +16,6 @@ import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * CodeLaser/maddi-mod#64: a copy constructor's result is independent of its argument when the elements are immutable. diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestDeepCaptureChain.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestDeepCaptureChain.java index bb7c6f9a9..2d1ce791f 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestDeepCaptureChain.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestDeepCaptureChain.java @@ -1,16 +1,17 @@ package io.codelaser.maddi.modification.analyzer.modification; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.info.Info; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * PLAN-modification-reachability phase 0: the deep capture chain. An object captured in a field, diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestDelegatingImplementation.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestDelegatingImplementation.java index 2bd789f2c..63916934c 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestDelegatingImplementation.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestDelegatingImplementation.java @@ -17,18 +17,19 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * CodeLaser/maddi-mod#24 R3, the langchain4j EmbeddingModel shape. The abstract {@code embedAll}'s parameter is the diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestDependentCulprit.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestDependentCulprit.java index 88cd81d1f..48a4166b8 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestDependentCulprit.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestDependentCulprit.java @@ -17,6 +17,16 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -25,15 +35,6 @@ import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.common.util.Culprits; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - -import static org.junit.jupiter.api.Assertions.*; /** * Why a method or parameter is dependent: the statement linking the return value or the parameter to a mutable field diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestElementFlowWidening.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestElementFlowWidening.java index 74a8c19c2..9b92b45ad 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestElementFlowWidening.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestElementFlowWidening.java @@ -17,17 +17,18 @@ package io.codelaser.maddi.modification.analyzer.modification; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.info.Info; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * Characterization of the CONTENT-TIER WIDENING that drives the dominant fernflower divergence diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestGenericCarrierImmutability.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestGenericCarrierImmutability.java index a677e3cc5..b3c7756a3 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestGenericCarrierImmutability.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestGenericCarrierImmutability.java @@ -17,6 +17,17 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.IOException; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -25,16 +36,6 @@ import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; /** * ⭐ A generic carrier is {@code @ImmutableHC} even when its final field is recorded as MODIFIED (it no longer is, diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestHiddenContentToModifiedArgument.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestHiddenContentToModifiedArgument.java index 97606a038..886485f78 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestHiddenContentToModifiedArgument.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestHiddenContentToModifiedArgument.java @@ -17,6 +17,15 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; @@ -28,14 +37,6 @@ import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; /** * A field whose declared type is an unbound type parameter is hidden content of its holder: the holder cannot modify diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIgnoreModificationsOnArgument.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIgnoreModificationsOnArgument.java index 848436f94..b573a9d15 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIgnoreModificationsOnArgument.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIgnoreModificationsOnArgument.java @@ -17,6 +17,15 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -25,14 +34,6 @@ import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * A disclaimed ({@code @IgnoreModifications}) variable must not implicate its own node when it is handed to a diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIgnoreModificationsOnFunctionalParameter.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIgnoreModificationsOnFunctionalParameter.java index 256b2c084..92003d585 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIgnoreModificationsOnFunctionalParameter.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIgnoreModificationsOnFunctionalParameter.java @@ -17,6 +17,15 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -25,14 +34,6 @@ import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * {@code @IgnoreModifications} on a parameter must disclaim what that object DOES, not merely protect the object diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIndependenceNotWrittenWhileUndecided.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIndependenceNotWrittenWhileUndecided.java index b574384bb..cd570daae 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIndependenceNotWrittenWhileUndecided.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIndependenceNotWrittenWhileUndecided.java @@ -17,6 +17,15 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertSame; + +import java.io.IOException; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -25,14 +34,6 @@ import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertSame; /** * A type's independence is not written while its own fields and abstract methods are undecided. It was: diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIndependenceThroughHierarchy.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIndependenceThroughHierarchy.java index 6cda60112..09aeefb12 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIndependenceThroughHierarchy.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIndependenceThroughHierarchy.java @@ -17,6 +17,15 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertSame; + +import java.io.IOException; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -25,14 +34,6 @@ import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertSame; /** * A type's independence is not capped by the verdict of the interfaces it implements: what it inherits from an diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIndependentMapField.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIndependentMapField.java index dbf90fe27..92ffad2d4 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIndependentMapField.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIndependentMapField.java @@ -17,20 +17,21 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; +import java.util.Set; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * A map's keys and values are linked through slices of its virtual field ({@code this.items.§$$s[-1]}), typed as diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIndependentNonPrivateField.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIndependentNonPrivateField.java index d65b9ff6e..6d1deed5d 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIndependentNonPrivateField.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestIndependentNonPrivateField.java @@ -17,6 +17,16 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.Info; @@ -26,15 +36,6 @@ import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.common.util.Culprits; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - -import static org.junit.jupiter.api.Assertions.*; /** * A non-private field is modified from outside without any method handing it out (road 080: an external diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestInheritedFieldHiddenContent.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestInheritedFieldHiddenContent.java index f4e8b8def..8f4eb4b26 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestInheritedFieldHiddenContent.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestInheritedFieldHiddenContent.java @@ -17,6 +17,15 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -25,14 +34,6 @@ import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; /** * The hc-free level ({@code @Immutable}) requires every instance field to be of a deeply immutable type — and an diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestInstanceOf.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestInstanceOf.java index 5c79aa913..374d48bd9 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestInstanceOf.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestInstanceOf.java @@ -1,26 +1,27 @@ package io.codelaser.maddi.modification.analyzer.modification; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; -import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import io.codelaser.maddi.modification.prepwork.variable.VariableData; +import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestInstanceOf extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestJacksonCommonsIo.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestJacksonCommonsIo.java index 17899b807..5d962b78f 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestJacksonCommonsIo.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestJacksonCommonsIo.java @@ -1,16 +1,17 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.inspection.resource.SourceSetImpl; import io.codelaser.maddi.modification.analyzer.CommonTest; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; /** * The commons-io and Jackson 2 hints (libs/commonsio, libs/jackson). A mapper that reads or writes is not modified; diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestLoggerModification.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestLoggerModification.java index 324951fc3..2ab6aef30 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestLoggerModification.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestLoggerModification.java @@ -17,6 +17,13 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -25,12 +32,6 @@ import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * A logger is a {@code @Container} whose log methods modify, but carry {@code @IgnoreModifications}: logging neither diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestLoopTransformDivergence.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestLoopTransformDivergence.java index 6a86d6fc4..125785a53 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestLoopTransformDivergence.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestLoopTransformDivergence.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.modification.analyzer.modification; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; /** * Adjudication probe for maddi-modification-analyzer/immutability-transform-divergence.md (the diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestMapValueModification.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestMapValueModification.java index a31807dd1..c6b449111 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestMapValueModification.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestMapValueModification.java @@ -17,18 +17,19 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * CodeLaser/maddi-mod#59: modifying a value taken out of a map field ({@code products.get(sku).put(...)}) modifies the diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestMockitoVerify.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestMockitoVerify.java index 0509e994b..f399bcb49 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestMockitoVerify.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestMockitoVerify.java @@ -1,16 +1,17 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.inspection.resource.SourceSetImpl; import io.codelaser.maddi.modification.analyzer.CommonTest; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; /** * What Mockito's verification calls do to the mock, as the analysis reads them (libs/mockito). Verifying an diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationBasics.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationBasics.java index bec330546..2ee3cb176 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationBasics.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationBasics.java @@ -18,20 +18,21 @@ package io.codelaser.maddi.modification.analyzer.modification; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; -import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.expression.MethodCall; -import io.codelaser.maddi.cst.api.info.*; -import io.codelaser.maddi.cst.api.statement.Statement; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.expression.MethodCall; +import io.codelaser.maddi.cst.api.info.*; +import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.prepwork.variable.VariableData; +import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestModificationBasics extends CommonTest { @Language("java") diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationField.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationField.java index e39962ec4..42bc2c464 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationField.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationField.java @@ -17,12 +17,19 @@ package io.codelaser.maddi.modification.analyzer.modification; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; -import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.EMPTY_PART_OF_CONSTRUCTION; +import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.PART_OF_CONSTRUCTION; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.BufferedReader; +import java.util.List; +import java.util.stream.Collectors; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; @@ -32,18 +39,12 @@ import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.BufferedReader; -import java.util.List; -import java.util.stream.Collectors; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.EMPTY_PART_OF_CONSTRUCTION; -import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.PART_OF_CONSTRUCTION; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import io.codelaser.maddi.modification.prepwork.variable.VariableData; +import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestModificationField extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationFunctional.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationFunctional.java index 23180a7a8..71b9947c7 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationFunctional.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationFunctional.java @@ -17,23 +17,24 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.*; +import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.*; -import io.codelaser.maddi.cst.api.statement.Statement; -import io.codelaser.maddi.cst.api.type.ParameterizedType; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.*; public class TestModificationFunctional extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationFunctionalE7.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationFunctionalE7.java index a9e6bdb7e..254e818ae 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationFunctionalE7.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationFunctionalE7.java @@ -1,17 +1,18 @@ package io.codelaser.maddi.modification.analyzer.modification; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.cst.api.info.*; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.info.*; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; /** * PLAN-modification-reachability §9 correction 2 / §11 ownership split: E7 characterization. diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationInConditionalExpression.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationInConditionalExpression.java index 8961122d3..9c8d86508 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationInConditionalExpression.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationInConditionalExpression.java @@ -17,17 +17,18 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.analyzer.CommonTest; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertTrue; /** * ⛔ Found by the Kotlin front end's verdict test: the SAME modifying call, written once inside an diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationInConditionalExpression2.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationInConditionalExpression2.java index d47c60cb7..b03f53224 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationInConditionalExpression2.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationInConditionalExpression2.java @@ -17,16 +17,16 @@ package io.codelaser.maddi.modification.analyzer.modification; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertFalse; import java.util.List; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * ⚠ The NEGATIVE control for the conditional-expression fix, taken verbatim from the shape the clone-bench diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationLoopTransform.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationLoopTransform.java index c590d4df1..37b5ac5f2 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationLoopTransform.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationLoopTransform.java @@ -17,16 +17,17 @@ package io.codelaser.maddi.modification.analyzer.modification; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.common.getset.ApplyGetSetTranslation; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.link.impl.localvar.AppliedFunctionalInterfaceVariable; -import io.codelaser.maddi.modification.prepwork.variable.Link; -import io.codelaser.maddi.modification.prepwork.variable.Links; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; -import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; @@ -37,16 +38,16 @@ import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.inspection.api.parser.ParseResult; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.common.getset.ApplyGetSetTranslation; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.link.impl.localvar.AppliedFunctionalInterfaceVariable; +import io.codelaser.maddi.modification.prepwork.variable.Link; +import io.codelaser.maddi.modification.prepwork.variable.Links; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import io.codelaser.maddi.modification.prepwork.variable.VariableData; +import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /* The fourth application of linking: CodeLaser's jfocus-transform rewrites loops and try-catch statements into diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationMethod.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationMethod.java index 5bac504b0..21266eeb6 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationMethod.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationMethod.java @@ -18,23 +18,23 @@ package io.codelaser.maddi.modification.analyzer.modification; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.EMPTY_PART_OF_CONSTRUCTION; import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.PART_OF_CONSTRUCTION; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; + public class TestModificationMethod extends CommonTest { @Language("java") diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationOfElementThroughPassedFunction.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationOfElementThroughPassedFunction.java index f6a2bf804..978b6fa06 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationOfElementThroughPassedFunction.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationOfElementThroughPassedFunction.java @@ -17,6 +17,17 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -25,16 +36,6 @@ import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * An element of a parameter handed to one of the method's functional parameters (CodeLaser/maddi-mod#67, option b), diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationOuterThis.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationOuterThis.java index 493fd75b0..b4838cf2c 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationOuterThis.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationOuterThis.java @@ -17,17 +17,18 @@ package io.codelaser.maddi.modification.analyzer.modification; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; /* Semantic audit 2026-07-18, unsound mechanism #1 (guava CompactHashMap.EntrySetView.remove): calling a diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationParameter.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationParameter.java index 2bc16c189..4b1caf5d7 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationParameter.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationParameter.java @@ -17,10 +17,16 @@ package io.codelaser.maddi.modification.analyzer.modification; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; -import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.File; +import java.io.Reader; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.Assignment; import io.codelaser.maddi.cst.api.expression.ConstructorCall; import io.codelaser.maddi.cst.api.expression.MethodCall; @@ -29,15 +35,10 @@ import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.statement.Statement; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.File; -import java.io.Reader; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.prepwork.variable.VariableData; +import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestModificationParameter extends CommonTest { @Language("java") diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationThroughCallResult.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationThroughCallResult.java index 66ef596e4..52cfa601e 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationThroughCallResult.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationThroughCallResult.java @@ -17,17 +17,18 @@ package io.codelaser.maddi.modification.analyzer.modification; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.modification.analyzer.CommonTest; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * A modification through a field of a call's result reaches what the result stands for: 'parent.self().data.add(x)' diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationThroughPassedFunction.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationThroughPassedFunction.java index dd853a07e..f006a70f1 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationThroughPassedFunction.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationThroughPassedFunction.java @@ -17,6 +17,18 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.IOException; +import java.util.List; +import java.util.Set; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; @@ -24,17 +36,6 @@ import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.List; -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; /** * A parameter that is modified ONLY because it is handed to a functional parameter of the same method -- vavr's diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationThroughView.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationThroughView.java index 66ec878a3..f8f21c8c7 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationThroughView.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModificationThroughView.java @@ -16,19 +16,20 @@ */ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * CodeLaser/maddi-mod#54: a removal through an iterator of a view of a parameter (guava's diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModifiedCulprit.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModifiedCulprit.java index dd62a0dc6..dafaca2ff 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModifiedCulprit.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestModifiedCulprit.java @@ -17,6 +17,16 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -25,15 +35,6 @@ import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.common.util.Culprits; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - -import static org.junit.jupiter.api.Assertions.*; /** * Why a method, parameter or field is {@code @Modified}: the reachability pass's cause chain, told as the statements diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestNestedElementModification.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestNestedElementModification.java index c2cd05581..a068d1dcb 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestNestedElementModification.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestNestedElementModification.java @@ -1,17 +1,18 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * CodeLaser/maddi-mod#62: a modification reaching a local only through its own element ({@code vlist.get(i).put(..)}, diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestNullableCulprit.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestNullableCulprit.java index 5be7a3598..09ed9cd3e 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestNullableCulprit.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestNullableCulprit.java @@ -17,23 +17,23 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.common.util.Culprits; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - -import static org.junit.jupiter.api.Assertions.*; /** * Why a field, parameter or method return is nullable: the nullability pass's chain back to the null, told as the diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestObjectReturnDefault.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestObjectReturnDefault.java index 5af6577ff..7a7156eb4 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestObjectReturnDefault.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestObjectReturnDefault.java @@ -16,6 +16,17 @@ */ package io.codelaser.maddi.modification.analyzer.modification; +import static io.codelaser.maddi.inspection.resource.SourceSetImpl.testProtocolSourceSet; +import static io.codelaser.maddi.modification.common.CommonTest.javaInspectorWithExtras; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; +import java.util.Map; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -28,16 +39,6 @@ import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.common.util.TolerantWrite; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.Map; - -import static io.codelaser.maddi.inspection.resource.SourceSetImpl.testProtocolSourceSet; -import static io.codelaser.maddi.modification.common.CommonTest.javaInspectorWithExtras; -import static org.junit.jupiter.api.Assertions.*; /** * The shape of refactor-base's {@code Loop.LoopData}/{@code Try.TryData}: a bodiless method returning diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestOptimisticModificationShapes.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestOptimisticModificationShapes.java index 2235fbedc..12c385fcc 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestOptimisticModificationShapes.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestOptimisticModificationShapes.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; /** * The OPTIMISTIC shapes of the Eclipse Collections engine work list (maddi-aapi-archive diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestReceiverChainThroughLibrary.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestReceiverChainThroughLibrary.java index 9298b812b..b0b527186 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestReceiverChainThroughLibrary.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestReceiverChainThroughLibrary.java @@ -17,18 +17,19 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * CodeLaser/maddi-mod#24 R1. A library method that modifies its receiver ({@code Iterator.next()}) is one node of the diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestReceiverLevel.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestReceiverLevel.java index 3f7ad6feb..0214dbde7 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestReceiverLevel.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestReceiverLevel.java @@ -17,6 +17,15 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; @@ -27,14 +36,6 @@ import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.link.impl.ReceiverLevel; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; /** * The receiver rules of {@link ReceiverLevel}, on the shape that capped vavr's persistent collections (VAVR.md, G1): diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRecursionThroughAbstract.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRecursionThroughAbstract.java index cf373c432..46cc62dd1 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRecursionThroughAbstract.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRecursionThroughAbstract.java @@ -17,15 +17,16 @@ package io.codelaser.maddi.modification.analyzer.modification; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * The pessimistic-bootstrap shape behind the dogfood's reverse-divergence class (PLAN-modification- diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRecursiveCycleReadOnly.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRecursiveCycleReadOnly.java index b58219889..a49317240 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRecursiveCycleReadOnly.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRecursiveCycleReadOnly.java @@ -17,18 +17,19 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * CodeLaser/maddi-mod#55: a parameter, or the receiver, that a recursion cycle only reads. The plain fixpoint keeps diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRecursiveReadOnly.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRecursiveReadOnly.java index e84e22c5c..09780d24a 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRecursiveReadOnly.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRecursiveReadOnly.java @@ -1,19 +1,20 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; +import java.util.TreeMap; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.TreeMap; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * CodeLaser/maddi-mod#55: a parameter (or the receiver) that a recursion cycle only reads. The fixpoint alone folds the diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRecursiveReadOnlyParameter.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRecursiveReadOnlyParameter.java index 5acda27b3..35c970af7 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRecursiveReadOnlyParameter.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRecursiveReadOnlyParameter.java @@ -1,16 +1,17 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertTrue; /* The shapes of langchain4j-core's JsonSchemaElementJsonUtils.fromMap(Map map), which only reads its diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRespelledFieldParameter.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRespelledFieldParameter.java index 979e7c292..2175ef62c 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRespelledFieldParameter.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRespelledFieldParameter.java @@ -1,16 +1,17 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; /* guava's ImmutableList.construct(Object...), reduced (CodeLaser/maddi-mod#72 4a). The summary is the union of its diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSetterArgumentNotModified.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSetterArgumentNotModified.java index 8d844cace..9962ff1f9 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSetterArgumentNotModified.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSetterArgumentNotModified.java @@ -1,5 +1,15 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; @@ -8,15 +18,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; /** * {@code instance.setKind(command.getKind())}: the setter keeps its argument, it does not modify it, so neither the diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSiblingCapsThroughHierarchy.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSiblingCapsThroughHierarchy.java index 6a59a1646..7bc65dbb3 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSiblingCapsThroughHierarchy.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSiblingCapsThroughHierarchy.java @@ -17,6 +17,15 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -26,14 +35,6 @@ import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; /** * ⭐ A stateful SIBLING must not cap an immutable implementation through a shared interface. diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSourceMethodContracts.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSourceMethodContracts.java index de280447f..ac67020f2 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSourceMethodContracts.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSourceMethodContracts.java @@ -17,17 +17,18 @@ package io.codelaser.maddi.modification.analyzer.modification; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.modification.analyzer.CommonTest; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * {@code @Finalizer} and {@code @IgnoreModifications} on a method are pure contracts: nothing computes them. On a diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestStaticAndSelfFields.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestStaticAndSelfFields.java index 40e5ff0b3..0043298f9 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestStaticAndSelfFields.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestStaticAndSelfFields.java @@ -17,6 +17,15 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -26,14 +35,6 @@ import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; /** * Static and instance fields are treated the same (road to immutability §050: "The definitions make no distinction diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestStaticSideEffects.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestStaticSideEffects.java index bb87504a1..d7ccec3d3 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestStaticSideEffects.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestStaticSideEffects.java @@ -17,23 +17,24 @@ package io.codelaser.maddi.modification.analyzer.modification; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.io.IOException; import java.util.List; import java.util.Set; import java.util.stream.Collectors; -import static org.junit.jupiter.api.Assertions.*; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * {@code @StaticSideEffects}: a method modifies static/global state of another type (road-to-immutability §050). diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestStructuralModification.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestStructuralModification.java index b1b76135f..5155c3379 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestStructuralModification.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestStructuralModification.java @@ -17,6 +17,14 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -24,13 +32,6 @@ import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * CodeLaser/maddi-mod#25: the structural (shallow) modification properties beside the deep ones. A collection is diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestStructuralModificationContract.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestStructuralModificationContract.java index 0b40005d3..6f1f4561f 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestStructuralModificationContract.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestStructuralModificationContract.java @@ -17,27 +17,28 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; +import java.util.Map; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.common.defaults.ContractReader; import io.codelaser.maddi.modification.prepwork.io.DecoratorImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.*; /** * CodeLaser/maddi-mod#25: {@code @Modified(hc = true)}, "modified in the hidden content only", is the annotation form diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSubtypeWaitsForAbstractSupertype.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSubtypeWaitsForAbstractSupertype.java index dcc058256..5d76d30f6 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSubtypeWaitsForAbstractSupertype.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSubtypeWaitsForAbstractSupertype.java @@ -17,6 +17,15 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertSame; + +import java.io.IOException; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -25,14 +34,6 @@ import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertSame; /** * A subtype waits for the verdict of an undecided abstract source supertype (CodeLaser/maddi-mod#82). It used to diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSwitchExpressionBlockModification.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSwitchExpressionBlockModification.java index e95f2fd56..8235c9a9a 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSwitchExpressionBlockModification.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSwitchExpressionBlockModification.java @@ -17,18 +17,19 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * CodeLaser/maddi-mod#63: a modification inside a switch expression's block arm ({@code case -> { ... yield }}) is a diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestTypeCulprit.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestTypeCulprit.java index 5b92ca603..0386817b1 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestTypeCulprit.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestTypeCulprit.java @@ -17,23 +17,24 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.common.util.Culprits; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - -import static org.junit.jupiter.api.Assertions.*; public class TestTypeCulprit extends CommonTest { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestUnmodifiableView.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestUnmodifiableView.java index 56a26df4c..8e70430d9 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestUnmodifiableView.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestUnmodifiableView.java @@ -16,6 +16,15 @@ */ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; +import java.util.Map; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.SourceSet; @@ -28,14 +37,6 @@ import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.common.defaults.ContractReader; import io.codelaser.maddi.modification.prepwork.io.DecoratorImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.*; /** * CodeLaser/maddi-mod#52: nothing is added to or removed from this object through this reference. The type-level diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestUnmodifiableViewIndependence.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestUnmodifiableViewIndependence.java index 32b9ce23b..17ed14a96 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestUnmodifiableViewIndependence.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestUnmodifiableViewIndependence.java @@ -17,6 +17,14 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -24,13 +32,6 @@ import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * CodeLaser/maddi-mod#60: a read-only view of a mutable field is unmodifiable, but dependent: the object modifies the diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestViewLocalCycle.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestViewLocalCycle.java index f13d54f48..1f8bceec7 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestViewLocalCycle.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestViewLocalCycle.java @@ -1,15 +1,16 @@ package io.codelaser.maddi.modification.analyzer.modification; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * CodeLaser/maddi-mod#75: a local initialised with a view-factory call ({@code rv.§m ≡ 0:list.§m}, #40) whose diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestViewMethods.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestViewMethods.java index 29d7225f4..8ad0f6755 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestViewMethods.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestViewMethods.java @@ -1,14 +1,15 @@ package io.codelaser.maddi.modification.analyzer.modification; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.util.List; -import static org.junit.jupiter.api.Assertions.*; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * Library "view" methods: {@code Collections.synchronizedList(list)} returns an object through which {@code list} can diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestVisitPredicateDisclaimer.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestVisitPredicateDisclaimer.java index 96f12c5db..2e34faca2 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestVisitPredicateDisclaimer.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestVisitPredicateDisclaimer.java @@ -17,15 +17,16 @@ package io.codelaser.maddi.modification.analyzer.modification; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * The {@code Element.visit(Predicate)} shape of the dogfood (Quest E, 2026-08-03): a visitor method diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestContainer.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestContainer.java index 4c7a70997..1b51ef967 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestContainer.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestContainer.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.modification.analyzer.nolink; -import io.codelaser.maddi.modification.analyzer.CommonTest; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * Independent @Container tests. A type is a container when no non-private method or constructor modifies its arguments diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestDefaultMethodModification.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestDefaultMethodModification.java index c35032919..7fd5123f8 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestDefaultMethodModification.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestDefaultMethodModification.java @@ -17,16 +17,17 @@ package io.codelaser.maddi.modification.analyzer.nolink; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * Modification of an implementation's field that reaches the field only through an inherited interface default diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestEnum.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestEnum.java index ac78e8b50..35c3b7afa 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestEnum.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestEnum.java @@ -17,20 +17,21 @@ package io.codelaser.maddi.modification.analyzer.nolink; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.CONTAINER_TYPE; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; - -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.CONTAINER_TYPE; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * Independent enum tests. An enum with only immutable (or no) instance fields and no modifying methods is immutable and diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestFieldModification.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestFieldModification.java index c085ddb75..c756b94c6 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestFieldModification.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestFieldModification.java @@ -17,17 +17,18 @@ package io.codelaser.maddi.modification.analyzer.nolink; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * Independent field-modification (@Modified / @NotModified field) tests. A field is modified when one of the type's diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestFinalFields.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestFinalFields.java index 1192d4e7b..f3db3caab 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestFinalFields.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestFinalFields.java @@ -17,18 +17,19 @@ package io.codelaser.maddi.modification.analyzer.nolink; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.FieldInfo; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.FieldInfo; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * Independent effectively-final (@Final) tests. A field is effectively final when it either has the {@code final} diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestImmutableHiddenContent.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestImmutableHiddenContent.java index e06c5dc32..0cc09f08e 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestImmutableHiddenContent.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestImmutableHiddenContent.java @@ -17,20 +17,21 @@ package io.codelaser.maddi.modification.analyzer.nolink; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; - -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * Independent immutability/hidden-content tests. A type with a type-parameter field carries hidden content (the actual diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestImmutableViaModification.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestImmutableViaModification.java index c35bec277..b4a1181c6 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestImmutableViaModification.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestImmutableViaModification.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.modification.analyzer.nolink; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; - -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * Independent @Immutable tests seen through the modification lens (plain classes rather than records). A type with diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestIndependent.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestIndependent.java index b29ece98a..d53aec412 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestIndependent.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestIndependent.java @@ -17,22 +17,23 @@ package io.codelaser.maddi.modification.analyzer.nolink; -import io.codelaser.maddi.modification.analyzer.CommonTest; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * Independent @Independent tests. A type is dependent when it exposes its mutable internals to the outside: a diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestInterfaceImmutable.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestInterfaceImmutable.java index af2117548..e3ba39646 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestInterfaceImmutable.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestInterfaceImmutable.java @@ -17,17 +17,18 @@ package io.codelaser.maddi.modification.analyzer.nolink; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * Regression tests for a class implementing an interface whose implementation turns out to be modifying. Both shapes diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestIteration.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestIteration.java index a740921b9..09b3da0c1 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestIteration.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestIteration.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.modification.analyzer.nolink; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.SingleIterationAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.io.IOException; import java.util.List; -import static org.junit.jupiter.api.Assertions.*; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.SingleIterationAnalyzer; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * Tests the iterative fixed-point of the analyzer. Each pass of {@link SingleIterationAnalyzer} reports how many diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestMethodModification.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestMethodModification.java index 3ecea1c8b..89e9f7d73 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestMethodModification.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestMethodModification.java @@ -17,17 +17,18 @@ package io.codelaser.maddi.modification.analyzer.nolink; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * Independent method-modification (@Modified / @NotModified) tests. A method is modifying when it assigns a field of diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestModificationContext.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestModificationContext.java index c5738f542..498c7cfd0 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestModificationContext.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestModificationContext.java @@ -17,17 +17,18 @@ package io.codelaser.maddi.modification.analyzer.nolink; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * Modification detected in less-obvious contexts: a static field mutated from a static method, an enclosing instance's diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestModificationIndirect.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestModificationIndirect.java index 584ed6f34..31e1c53a2 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestModificationIndirect.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestModificationIndirect.java @@ -17,16 +17,17 @@ package io.codelaser.maddi.modification.analyzer.nolink; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * Soundness regression tests: a field modification must be detected even when it happens through an indirection -- diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestParameterModification.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestParameterModification.java index c404ee147..15a824352 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestParameterModification.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestParameterModification.java @@ -17,18 +17,19 @@ package io.codelaser.maddi.modification.analyzer.nolink; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; /** * Independent parameter-modification (@Modified / @NotModified parameter) tests. A parameter is modified when the diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityFixtures.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityFixtures.java index 035dd9680..d016f02fe 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityFixtures.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityFixtures.java @@ -1,5 +1,11 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import org.intellij.lang.annotations.Language; + import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -10,11 +16,6 @@ import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.analyzer.impl.ModAnalyzerForTesting; import io.codelaser.maddi.modification.analyzer.impl.SingleIterationAnalyzerImpl; -import org.intellij.lang.annotations.Language; - -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; /** * The harness the per-part test classes share: {@code run} builds a pass per fixture, {@code verdicts} and diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestCallResults.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestCallResults.java index 3e85a0fcc..0247842c9 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestCallResults.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestCallResults.java @@ -1,15 +1,15 @@ package io.codelaser.maddi.modification.analyzer.nullability; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Map; import java.util.stream.Collectors; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; /** * {@link CallResults}: what a call's result stands for, through lambdas, method references, streams and factories. diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestContracts.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestContracts.java index 4a8ef46de..597c49a9c 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestContracts.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestContracts.java @@ -1,19 +1,20 @@ package io.codelaser.maddi.modification.analyzer.nullability; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.type.NullableState; -import io.codelaser.maddi.cst.api.type.ParameterizedType; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.type.NullableState; +import io.codelaser.maddi.cst.api.type.ParameterizedType; /** * {@link Contracts}: declared and inferred contracts, annotations, null-marked code, overrides and their clamps. diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestMethodWalker.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestMethodWalker.java index 3bf499d62..1981faf30 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestMethodWalker.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestMethodWalker.java @@ -1,27 +1,28 @@ package io.codelaser.maddi.modification.analyzer.nullability; -import io.codelaser.maddi.cst.api.info.FieldInfo; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.expression.VariableExpression; +import io.codelaser.maddi.cst.api.info.FieldInfo; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.statement.Block; import io.codelaser.maddi.cst.api.statement.IfElseStatement; -import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.api.statement.TryStatement; - -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.variable.Variable; /** * {@link MethodWalker}: the walk of a method body, its use sites, smart casts, locals, guards and key presence. diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestNullGraph.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestNullGraph.java index 42884f4c6..f0b6de704 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestNullGraph.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestNullGraph.java @@ -1,17 +1,18 @@ package io.codelaser.maddi.modification.analyzer.nullability; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.type.ParameterizedType; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Map; import java.util.stream.Collectors; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.type.ParameterizedType; /** * {@link NullGraph}: the slots of arrays, type arguments and content, how flows tie them, and the closure over them. diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestNullabilityAnnotations.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestNullabilityAnnotations.java index e5e6bcc64..0309da57c 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestNullabilityAnnotations.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestNullabilityAnnotations.java @@ -1,5 +1,13 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -8,13 +16,6 @@ import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.prepwork.io.NullabilityDecorator; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * Annotated Java out (docs/design/nullability.md D1, T5a): the analyzer with {@code nullability} on writes the B2 diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestOutsideCallers.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestOutsideCallers.java index 966abc1df..cbdc5ed3e 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestOutsideCallers.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestOutsideCallers.java @@ -1,11 +1,11 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; - /** * {@link OutsideCallers}: the world policy, and the parameters code outside the analysis can call with null. */ diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestPreconditions.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestPreconditions.java index 0055a620c..7c0287ea5 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestPreconditions.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestPreconditions.java @@ -1,21 +1,22 @@ package io.codelaser.maddi.modification.analyzer.nullability; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import io.codelaser.maddi.cst.api.statement.IfElseStatement; -import io.codelaser.maddi.cst.api.statement.Statement; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.IfElseStatement; +import io.codelaser.maddi.cst.api.statement.Statement; /** * {@link Preconditions}: a parameter its method answers null for with its own exception. diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestReadNarrowing.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestReadNarrowing.java index 83c00280c..55835af6e 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestReadNarrowing.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestReadNarrowing.java @@ -1,17 +1,18 @@ package io.codelaser.maddi.modification.analyzer.nullability; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Map; + import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.expression.VariableExpression; -import io.codelaser.maddi.cst.api.variable.Variable; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.statement.Statement; - -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.variable.Variable; /** * {@link ReadNarrowing}: a read narrowed by the classes that can reach it. diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestSeeds.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestSeeds.java index d973c93c2..adb99b21f 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestSeeds.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestSeeds.java @@ -1,22 +1,23 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.analyzer.impl.SingleIterationAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; /** * {@link Seeds}: where a null comes from, a literal, a library return, a field's default, an argument; and what is no diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestSwitches.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestSwitches.java index a454e8984..9aef6e545 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestSwitches.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestSwitches.java @@ -1,11 +1,11 @@ package io.codelaser.maddi.modification.analyzer.nullability; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.Map; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; /** * {@link Switches}: a gate switched off in-process. diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestTolerance.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestTolerance.java index d55299969..0ffe02f8d 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestTolerance.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestTolerance.java @@ -1,15 +1,15 @@ package io.codelaser.maddi.modification.analyzer.nullability; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.List; import java.util.Map; import java.util.Set; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; /** * {@link Tolerance}: maddi-mod#68's tolerated nulls, and where tolerance stops. diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestTolerantSlots.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestTolerantSlots.java index 60d98c6b5..15d82f7c9 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestTolerantSlots.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestTolerantSlots.java @@ -1,17 +1,18 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.type.NullableState; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * maddi-mod#68's tolerated null stops at a declared slot: a public parameter written into the elements of a field diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestVerdicts.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestVerdicts.java index f041b8641..23a791e54 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestVerdicts.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestVerdicts.java @@ -1,15 +1,16 @@ package io.codelaser.maddi.modification.analyzer.nullability; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; /** * {@link Verdicts}: what the verdicts make of the closure, stored-only parameters and asserted locals. diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/rewire/TestAnalysisFingerprint.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/rewire/TestAnalysisFingerprint.java index d41f64b01..4ea7315a9 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/rewire/TestAnalysisFingerprint.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/rewire/TestAnalysisFingerprint.java @@ -17,23 +17,24 @@ package io.codelaser.maddi.modification.analyzer.rewire; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.modification.prepwork.io.AnalysisFingerprint; -import io.codelaser.maddi.cst.api.element.FingerPrint; -import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.runtime.Runtime; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.io.IOException; import java.util.List; import java.util.Map; -import static org.junit.jupiter.api.Assertions.*; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.element.FingerPrint; +import io.codelaser.maddi.cst.api.element.SourceSet; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.runtime.Runtime; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import io.codelaser.maddi.modification.prepwork.io.AnalysisFingerprint; /** * First cut of the analysisFingerprint (docs/design/analysis-rewiring.md): compute it over REAL analyzer output and check the diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/rewire/TestClearBeforeRecompute.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/rewire/TestClearBeforeRecompute.java index 87c21ec31..f1ccf9786 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/rewire/TestClearBeforeRecompute.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/rewire/TestClearBeforeRecompute.java @@ -17,14 +17,15 @@ package io.codelaser.maddi.modification.analyzer.rewire; +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.PropertyValueMap; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.PropertyValueMapImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; /** * The early-cutoff skip's clear-before-recompute primitive ({@code PropertyValueMap.removeIf}). When the diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/rewire/TestDerivedRewire.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/rewire/TestDerivedRewire.java index d6388e155..49055dff8 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/rewire/TestDerivedRewire.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/rewire/TestDerivedRewire.java @@ -17,11 +17,17 @@ package io.codelaser.maddi.modification.analyzer.rewire; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.io.AnalysisFingerprint; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; @@ -30,16 +36,11 @@ import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.io.AnalysisFingerprint; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; /** * The derived-tier {@code Value.rewire} implementations (previously NYI): {@code IMPLEMENTATIONS} diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestReachabilityOnClosure.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestReachabilityOnClosure.java index 95c5d251e..cfb645a9e 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestReachabilityOnClosure.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestReachabilityOnClosure.java @@ -1,5 +1,14 @@ package io.codelaser.maddi.modification.analyzer.shadow; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.*; +import java.util.stream.Collectors; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DynamicTest; +import org.junit.jupiter.api.TestFactory; + import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.PropertyValueMap; import io.codelaser.maddi.cst.api.info.Info; @@ -7,19 +16,10 @@ import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.graph.G; -import io.codelaser.maddi.graph.V; import io.codelaser.maddi.inspection.api.parser.ParseResult; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.prepwork.io.AnalysisFingerprint; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DynamicTest; -import org.junit.jupiter.api.TestFactory; - -import java.util.*; -import java.util.stream.Collectors; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * An incremental analysis recomputes the verdict closure of the changed types, against the carried verdicts of all diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestShadowCloneBench.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestShadowCloneBench.java index ef8c31a57..9040e5e3c 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestShadowCloneBench.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestShadowCloneBench.java @@ -1,35 +1,35 @@ package io.codelaser.maddi.modification.analyzer.shadow; -import io.codelaser.maddi.modification.common.CloneBenchCorpus; -import ch.qos.logback.classic.Level; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.modification.analyzer.impl.ModAnalyzerForTesting; -import io.codelaser.maddi.modification.analyzer.impl.SingleIterationAnalyzerImpl; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; -import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import io.codelaser.maddi.inspection.api.parser.Summary; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import static io.codelaser.maddi.inspection.resource.SourceSetImpl.testProtocolSourceSet; +import static io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults.ANALYZED_RESULTS; import java.io.IOException; import java.net.URI; -import java.nio.file.Files; import java.nio.file.Path; import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; -import static io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults.ANALYZED_RESULTS; -import static io.codelaser.maddi.inspection.resource.SourceSetImpl.testProtocolSourceSet; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import ch.qos.logback.classic.Level; +import io.codelaser.maddi.cst.api.element.SourceSet; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import io.codelaser.maddi.inspection.api.parser.Summary; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import io.codelaser.maddi.modification.analyzer.impl.ModAnalyzerForTesting; +import io.codelaser.maddi.modification.analyzer.impl.SingleIterationAnalyzerImpl; +import io.codelaser.maddi.modification.common.CloneBenchCorpus; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; /** * PLAN-modification-reachability phase 1: the shadow diff over the clone-bench corpus (testarchive, diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestShadowHiddenContentFace.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestShadowHiddenContentFace.java index 792d8262b..951baf1b9 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestShadowHiddenContentFace.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestShadowHiddenContentFace.java @@ -17,17 +17,18 @@ package io.codelaser.maddi.modification.analyzer.shadow; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; /** * The shadow pass follows an assigned-from link as "one end modified implies the other" only between two REAL faces, diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestShadowModificationPass.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestShadowModificationPass.java index 54823b91e..a955f1109 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestShadowModificationPass.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestShadowModificationPass.java @@ -1,18 +1,19 @@ package io.codelaser.maddi.modification.analyzer.shadow; -import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.modification.analyzer.impl.ModAnalyzerForTesting; -import io.codelaser.maddi.modification.analyzer.impl.SingleIterationAnalyzerImpl; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import io.codelaser.maddi.modification.analyzer.impl.ModAnalyzerForTesting; +import io.codelaser.maddi.modification.analyzer.impl.SingleIterationAnalyzerImpl; /** * PLAN-modification-reachability phase 1: validate the shadow pass. Two obligations: diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/staticvalues/TestStaticValuesAssignment.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/staticvalues/TestStaticValuesAssignment.java index 8d30cc92b..46f06d3fb 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/staticvalues/TestStaticValuesAssignment.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/staticvalues/TestStaticValuesAssignment.java @@ -1,24 +1,20 @@ package io.codelaser.maddi.modification.analyzer.staticvalues; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.*; +import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.modification.analyzer.CommonTest; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.*; -import io.codelaser.maddi.cst.api.statement.Statement; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.*; public class TestStaticValuesAssignment extends CommonTest { diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/AnalysisHelper.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/AnalysisHelper.java index b06fe3d3a..c2982abb3 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/AnalysisHelper.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/AnalysisHelper.java @@ -17,6 +17,12 @@ package io.codelaser.maddi.modification.common; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.*; + +import java.util.Map; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -24,12 +30,6 @@ import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import java.util.Map; - -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.*; - public class AnalysisHelper { public Value.Immutable typeImmutableNullIfUndecided(ParameterizedType parameterizedType) { diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/AnnotationProvider.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/AnnotationProvider.java index 37dc7dfa4..738786c62 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/AnnotationProvider.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/AnnotationProvider.java @@ -17,11 +17,11 @@ package io.codelaser.maddi.modification.common.defaults; +import java.util.List; + import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.expression.AnnotationExpression; -import java.util.List; - public interface AnnotationProvider { List annotations(Element element); diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/AnnotationToProperty.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/AnnotationToProperty.java index e9cf9f3e0..bae559aef 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/AnnotationToProperty.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/AnnotationToProperty.java @@ -17,7 +17,16 @@ package io.codelaser.maddi.modification.common.defaults; -import io.codelaser.maddi.modification.common.getset.GetSetHelper; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; +import static io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer.AnnotationOrigin.*; + +import java.util.*; +import java.util.stream.Stream; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.codelaser.maddi.annotation.*; import io.codelaser.maddi.annotation.eventual.Mark; import io.codelaser.maddi.annotation.eventual.Only; @@ -36,16 +45,8 @@ import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.inspection.api.util.CreateSyntheticFieldsForGetSet; +import io.codelaser.maddi.modification.common.getset.GetSetHelper; import io.codelaser.maddi.util.GetSetNames; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.*; -import java.util.stream.Stream; - -import static io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer.AnnotationOrigin.*; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; class AnnotationToProperty { private static final Logger LOGGER = LoggerFactory.getLogger(AnnotationToProperty.class); diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/ContractReader.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/ContractReader.java index 55cd2aa00..c8537ff1a 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/ContractReader.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/ContractReader.java @@ -17,14 +17,14 @@ package io.codelaser.maddi.modification.common.defaults; +import java.util.Map; + import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.runtime.Runtime; -import java.util.Map; - /** * Reads the contracts a user wrote in source code: the annotations on an element, translated to property * values. Contracts are re-derived on demand from the CST rather than persisted, so the guard can always diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/DebugVisitor.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/DebugVisitor.java index 29904c575..3fbcf371f 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/DebugVisitor.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/DebugVisitor.java @@ -17,13 +17,13 @@ package io.codelaser.maddi.modification.common.defaults; +import java.util.List; +import java.util.Map; + import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.graph.G; -import java.util.List; -import java.util.Map; - public interface DebugVisitor { default void allTypes(List allTypes) { diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/ShallowAnalyzer.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/ShallowAnalyzer.java index f154efad0..2b43e141c 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/ShallowAnalyzer.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/ShallowAnalyzer.java @@ -17,6 +17,13 @@ package io.codelaser.maddi.modification.common.defaults; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.DEFAULTS_ANALYZER; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; + +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + import io.codelaser.maddi.cst.api.analysis.Message; import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.element.Element; @@ -28,13 +35,6 @@ import io.codelaser.maddi.graph.ImmutableGraph; import io.codelaser.maddi.graph.op.Linearize; -import java.util.*; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.DEFAULTS_ANALYZER; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; - public class ShallowAnalyzer { private final Runtime runtime; private final AnnotationProvider annotationProvider; diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/ShallowMethodAnalyzer.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/ShallowMethodAnalyzer.java index dc296946b..e3325d71b 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/ShallowMethodAnalyzer.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/ShallowMethodAnalyzer.java @@ -17,10 +17,19 @@ package io.codelaser.maddi.modification.common.defaults; -import io.codelaser.maddi.modification.common.FunctionTypes; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.*; +import static io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer.AnnotationOrigin.*; + +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import io.codelaser.maddi.modification.common.util.TolerantWrite; -import io.codelaser.maddi.modification.common.AnalysisHelper; import io.codelaser.maddi.cst.api.analysis.Message; import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.Value; @@ -35,18 +44,9 @@ import io.codelaser.maddi.cst.impl.analysis.MessageImpl; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.*; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer.AnnotationOrigin.*; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.*; +import io.codelaser.maddi.modification.common.AnalysisHelper; +import io.codelaser.maddi.modification.common.FunctionTypes; +import io.codelaser.maddi.modification.common.util.TolerantWrite; /* Important to note that, because it is used in the modification analyzer (first called by MethodModAnalyzer diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/ShallowTypeAnalyzer.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/ShallowTypeAnalyzer.java index 898d0e9dd..17ae7e0a2 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/ShallowTypeAnalyzer.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/ShallowTypeAnalyzer.java @@ -17,8 +17,23 @@ package io.codelaser.maddi.modification.common.defaults; -import io.codelaser.maddi.modification.common.util.TolerantWrite; -import io.codelaser.maddi.modification.common.AnalysisHelper; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.IMMUTABLE_HC; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.MUTABLE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.INDEPENDENT; +import static io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer.AnnotationOrigin.*; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.codelaser.maddi.annotation.Independent; import io.codelaser.maddi.cst.api.analysis.Message; import io.codelaser.maddi.cst.api.analysis.Property; @@ -29,27 +44,13 @@ import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.info.TypeParameter; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.api.type.ParameterizedType; -import io.codelaser.maddi.cst.api.info.TypeParameter; import io.codelaser.maddi.cst.impl.analysis.MessageImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer.AnnotationOrigin.*; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.IMMUTABLE_HC; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.MUTABLE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.INDEPENDENT; +import io.codelaser.maddi.modification.common.AnalysisHelper; +import io.codelaser.maddi.modification.common.util.TolerantWrite; public class ShallowTypeAnalyzer extends AnnotationToProperty { private static final Logger LOGGER = LoggerFactory.getLogger(ShallowTypeAnalyzer.class); diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/getset/ApplyGetSetTranslation.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/getset/ApplyGetSetTranslation.java index 537b50da7..a3a23d6b8 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/getset/ApplyGetSetTranslation.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/getset/ApplyGetSetTranslation.java @@ -17,6 +17,8 @@ package io.codelaser.maddi.modification.common.getset; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.GET_SET_FIELD; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.Source; import io.codelaser.maddi.cst.api.expression.*; @@ -28,8 +30,6 @@ import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.GET_SET_FIELD; - public record ApplyGetSetTranslation(Runtime runtime, java.util.function.BiConsumer observer) implements TranslationMap { diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/getset/GetSetHelper.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/getset/GetSetHelper.java index 8d036b8f9..f8fb0b8f5 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/getset/GetSetHelper.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/getset/GetSetHelper.java @@ -17,6 +17,8 @@ package io.codelaser.maddi.modification.common.getset; +import static io.codelaser.maddi.inspection.api.util.CreateSyntheticFieldsForGetSet.*; + import io.codelaser.maddi.annotation.Fluent; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.expression.Assignment; @@ -39,8 +41,6 @@ import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.common.util.OwnStaticState; -import static io.codelaser.maddi.inspection.api.util.CreateSyntheticFieldsForGetSet.*; - public class GetSetHelper { /* diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/ConstructedReturn.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/ConstructedReturn.java index 637a894d6..82c25c43f 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/ConstructedReturn.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/ConstructedReturn.java @@ -5,6 +5,15 @@ */ package io.codelaser.maddi.modification.common.util; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.IdentityHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + import io.codelaser.maddi.cst.api.element.Visitor; import io.codelaser.maddi.cst.api.expression.Assignment; import io.codelaser.maddi.cst.api.expression.Cast; @@ -24,15 +33,6 @@ import io.codelaser.maddi.cst.api.variable.LocalVariable; import io.codelaser.maddi.cst.api.variable.Variable; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.IdentityHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - /** * Does a method construct what it returns? Decided from the shape of its body alone, so that a stub of it * can say {@code return new T();} instead of {@code return null;}. diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/Culprits.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/Culprits.java index a7326504c..9dd924797 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/Culprits.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/Culprits.java @@ -17,6 +17,9 @@ package io.codelaser.maddi.modification.common.util; +import java.net.URI; +import java.util.List; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.element.Source; @@ -28,9 +31,6 @@ import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.statement.ExplicitConstructorInvocation; -import java.net.URI; -import java.util.List; - /** * Culprits: beside a verdict, the first statement responsible for it, followed into the callees ({@link * Value.Culprit}), for a developer asking "why?". Off by default: a run's {@code ModificationOptions.culprits} diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolateClass.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolateClass.java index 8195b4f33..e6faf00d8 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolateClass.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolateClass.java @@ -1,5 +1,19 @@ package io.codelaser.maddi.modification.common.util; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Stream; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.codelaser.maddi.cst.api.element.CompilationUnit; import io.codelaser.maddi.cst.api.element.DetailedSources; import io.codelaser.maddi.cst.api.info.FieldInfo; @@ -13,19 +27,6 @@ import io.codelaser.maddi.cst.print.FormattingOptionsImpl; import io.codelaser.maddi.cst.print.formatter2.Formatter2Impl; import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Stream; /** * Lifts one type, or a small set of them, out of its project into a standalone source tree that compiles diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolateMethod.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolateMethod.java index d1af0ed19..afd8cd960 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolateMethod.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolateMethod.java @@ -1,10 +1,12 @@ package io.codelaser.maddi.modification.common.util; +import java.util.*; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.codelaser.maddi.cst.api.element.CompilationUnit; -import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.element.DetailedSources; -import io.codelaser.maddi.cst.api.element.Element; -import io.codelaser.maddi.cst.api.element.Source; import io.codelaser.maddi.cst.api.expression.*; import io.codelaser.maddi.cst.api.info.*; import io.codelaser.maddi.cst.api.output.Formatter; @@ -12,21 +14,12 @@ import io.codelaser.maddi.cst.api.output.Qualification; import io.codelaser.maddi.cst.api.output.TypeNameRequired; import io.codelaser.maddi.cst.api.runtime.Runtime; -import io.codelaser.maddi.cst.api.statement.Block; -import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; -import io.codelaser.maddi.cst.api.type.NamedType; import io.codelaser.maddi.cst.api.type.ParameterizedType; -import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.This; import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.cst.print.FormattingOptionsImpl; import io.codelaser.maddi.cst.print.formatter2.Formatter2Impl; import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.*; -import java.util.function.Predicate; public class IsolateMethod { private static final Logger LOGGER = LoggerFactory.getLogger(IsolateMethod.class); diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolationCore.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolationCore.java index 0e90f2f00..4bda522f3 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolationCore.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolationCore.java @@ -1,16 +1,19 @@ package io.codelaser.maddi.modification.common.util; +import java.util.*; +import java.util.function.Predicate; +import java.util.stream.Stream; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.codelaser.maddi.cst.api.element.CompilationUnit; -import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.element.DetailedSources; import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.element.Source; +import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.expression.*; import io.codelaser.maddi.cst.api.info.*; -import io.codelaser.maddi.cst.api.output.Formatter; -import io.codelaser.maddi.cst.api.output.OutputBuilder; -import io.codelaser.maddi.cst.api.output.Qualification; -import io.codelaser.maddi.cst.api.output.TypeNameRequired; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.api.statement.Block; import io.codelaser.maddi.cst.api.statement.ExplicitConstructorInvocation; @@ -22,16 +25,7 @@ import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.This; -import io.codelaser.maddi.cst.api.variable.Variable; -import io.codelaser.maddi.cst.print.FormattingOptionsImpl; -import io.codelaser.maddi.cst.print.formatter2.Formatter2Impl; import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.*; -import java.util.function.Predicate; -import java.util.stream.Stream; /** * The stub graph that {@link IsolateMethod} and {@link IsolateClass} both build: every type, method, field and * annotation the isolated code reaches, reduced to something that compiles on the JDK alone. diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/ProgramHierarchy.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/ProgramHierarchy.java index 9684f8124..450d82638 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/ProgramHierarchy.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/ProgramHierarchy.java @@ -5,6 +5,10 @@ */ package io.codelaser.maddi.modification.common.util; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; + import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.expression.ConstructorCall; import io.codelaser.maddi.cst.api.expression.Lambda; @@ -14,10 +18,6 @@ import io.codelaser.maddi.cst.api.statement.LocalTypeDeclaration; import io.codelaser.maddi.cst.api.type.ParameterizedType; -import java.util.Collection; -import java.util.HashSet; -import java.util.Set; - /** * What a WHOLE PROGRAM knows about its class hierarchy, for a consumer that will only ever see a sliver of it. * diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/CommonIsolateMethodTest.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/CommonIsolateMethodTest.java index 3dbf88ce0..80b845771 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/CommonIsolateMethodTest.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/CommonIsolateMethodTest.java @@ -1,19 +1,20 @@ package io.codelaser.maddi.modification.common; +import static io.codelaser.maddi.modification.common.CommonTest.javaInspectorFactory; + +import java.io.IOException; +import java.util.Map; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.slf4j.LoggerFactory; + import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; -import io.codelaser.maddi.modification.common.util.IsolateMethod; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.Map; - -import static io.codelaser.maddi.modification.common.CommonTest.javaInspectorFactory; +import io.codelaser.maddi.modification.common.util.IsolateMethod; public abstract class CommonIsolateMethodTest { protected JavaInspector javaInspector; diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass1.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass1.java index 1221f5e04..2acfe399d 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass1.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass1.java @@ -1,12 +1,12 @@ package io.codelaser.maddi.modification.common; -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.Logger; -import io.codelaser.maddi.modification.common.util.IsolateClass; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import static io.codelaser.maddi.modification.common.CommonTest.javaInspectorFactory; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.Map; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; @@ -14,12 +14,13 @@ import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; -import java.io.IOException; -import java.util.LinkedHashMap; -import java.util.Map; - -import static io.codelaser.maddi.modification.common.CommonTest.javaInspectorFactory; -import static org.junit.jupiter.api.Assertions.*; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.codelaser.maddi.modification.common.util.IsolateClass; /** * A class isolate emits a small source tree rather than one file: the isolated type in its own package, and one diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass2.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass2.java index c560023b0..eb22eceac 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass2.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass2.java @@ -1,12 +1,12 @@ package io.codelaser.maddi.modification.common; -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.Logger; -import io.codelaser.maddi.modification.common.util.IsolateClass; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import static io.codelaser.maddi.modification.common.CommonTest.javaInspectorFactory; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.Map; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; @@ -14,12 +14,13 @@ import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; -import java.io.IOException; -import java.util.LinkedHashMap; -import java.util.Map; - -import static io.codelaser.maddi.modification.common.CommonTest.javaInspectorFactory; -import static org.junit.jupiter.api.Assertions.*; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.codelaser.maddi.modification.common.util.IsolateClass; /** * The cases that cost {@link io.codelaser.maddi.modification.common.util.IsolateMethod} its defects, in a class diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass3SelfReference.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass3SelfReference.java index b5ccd7350..04ea74f50 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass3SelfReference.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass3SelfReference.java @@ -1,12 +1,12 @@ package io.codelaser.maddi.modification.common; -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.Logger; -import io.codelaser.maddi.modification.common.util.IsolateClass; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import static io.codelaser.maddi.modification.common.CommonTest.javaInspectorFactory; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.Map; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; @@ -14,12 +14,13 @@ import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; -import java.io.IOException; -import java.util.LinkedHashMap; -import java.util.Map; - -import static io.codelaser.maddi.modification.common.CommonTest.javaInspectorFactory; -import static org.junit.jupiter.api.Assertions.*; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.codelaser.maddi.modification.common.util.IsolateClass; /** * A class isolate keeps ALL of the type's members, pasted verbatim, on a type that IS the original. So anything diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass4Compiles.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass4Compiles.java index 49ea133ba..1ee272511 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass4Compiles.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass4Compiles.java @@ -1,12 +1,12 @@ package io.codelaser.maddi.modification.common; -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.Logger; -import io.codelaser.maddi.modification.common.util.IsolateClass; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import static io.codelaser.maddi.modification.common.CommonTest.javaInspectorFactory; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.Map; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; @@ -14,12 +14,13 @@ import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; -import java.io.IOException; -import java.util.LinkedHashMap; -import java.util.Map; - -import static io.codelaser.maddi.modification.common.CommonTest.javaInspectorFactory; -import static org.junit.jupiter.api.Assertions.assertEquals; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.codelaser.maddi.modification.common.util.IsolateClass; /** * Class isolates that parse and do not compile. diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass5Group.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass5Group.java index ef3668dd6..be2c2b857 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass5Group.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass5Group.java @@ -1,12 +1,13 @@ package io.codelaser.maddi.modification.common; -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.Logger; -import io.codelaser.maddi.modification.common.util.IsolateClass; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import static io.codelaser.maddi.modification.common.CommonTest.javaInspectorFactory; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; @@ -14,13 +15,13 @@ import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; -import java.io.IOException; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import static io.codelaser.maddi.modification.common.CommonTest.javaInspectorFactory; -import static org.junit.jupiter.api.Assertions.*; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.codelaser.maddi.modification.common.util.IsolateClass; /** * Isolating a set of types together, rather than one. diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass6FreshFactories.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass6FreshFactories.java index 5db79a37f..4bca1e3ef 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass6FreshFactories.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass6FreshFactories.java @@ -1,31 +1,32 @@ package io.codelaser.maddi.modification.common; -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.Logger; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import io.codelaser.maddi.modification.common.util.IsolateClass; -import io.codelaser.maddi.modification.common.util.ProgramHierarchy; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.slf4j.LoggerFactory; +import static io.codelaser.maddi.modification.common.CommonTest.javaInspectorFactory; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.IOException; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; -import static io.codelaser.maddi.modification.common.CommonTest.javaInspectorFactory; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.slf4j.LoggerFactory; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.codelaser.maddi.modification.common.util.IsolateClass; +import io.codelaser.maddi.modification.common.util.ProgramHierarchy; /** * A stub of a factory says {@code return new T();} when the original constructs what it returns, and diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass7InheritedMembers.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass7InheritedMembers.java index 3b1781779..f5dfe9c95 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass7InheritedMembers.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass7InheritedMembers.java @@ -1,18 +1,9 @@ package io.codelaser.maddi.modification.common; -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.Logger; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import io.codelaser.maddi.modification.common.util.IsolateClass; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.slf4j.LoggerFactory; +import static io.codelaser.maddi.modification.common.CommonTest.javaInspectorFactory; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.IOException; import java.util.LinkedHashMap; @@ -20,10 +11,20 @@ import java.util.Map; import java.util.regex.Pattern; -import static io.codelaser.maddi.modification.common.CommonTest.javaInspectorFactory; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.slf4j.LoggerFactory; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.codelaser.maddi.modification.common.util.IsolateClass; /** * A stub does not re-declare a member it inherits from an ANALYSED supertype — the JDK, or a type the isolate diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass8Natures.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass8Natures.java index b24d4128c..da574127d 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass8Natures.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass8Natures.java @@ -1,12 +1,13 @@ package io.codelaser.maddi.modification.common; -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.Logger; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import io.codelaser.maddi.modification.common.util.IsolateClass; +import static io.codelaser.maddi.modification.common.CommonTest.javaInspectorFactory; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; @@ -14,13 +15,13 @@ import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; -import java.io.IOException; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import static io.codelaser.maddi.modification.common.CommonTest.javaInspectorFactory; -import static org.junit.jupiter.api.Assertions.*; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.codelaser.maddi.modification.common.util.IsolateClass; /** * CodeLaser/maddi#180, found isolating fernflower's {@code DomHelper} with the 33 types it reaches: four shapes a diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod1.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod1.java index d7c97f88e..5b92e6f6d 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod1.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod1.java @@ -1,13 +1,14 @@ package io.codelaser.maddi.modification.common; -import io.codelaser.maddi.modification.common.util.IsolateMethod; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.common.util.IsolateMethod; public class TestIsolateMethod1 extends CommonIsolateMethodTest { diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod10FullyQualified.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod10FullyQualified.java index 5cbc0dd4b..eccbd726a 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod10FullyQualified.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod10FullyQualified.java @@ -1,15 +1,16 @@ package io.codelaser.maddi.modification.common; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.util.Map; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; // detailed sources distinguish a package-qualified reference from a simple one: a type written fully qualified // ('p.q.Helper') must be reproduced as a namespace stub so the verbatim text keeps resolving -- a simple-name diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod11Annotations.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod11Annotations.java index a65f1bca1..38ddff44e 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod11Annotations.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod11Annotations.java @@ -1,12 +1,13 @@ package io.codelaser.maddi.modification.common; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import io.codelaser.maddi.cst.api.info.TypeInfo; // annotations on the isolated method: the annotation type (and any attributes used) must be stubbed public class TestIsolateMethod11Annotations extends CommonIsolateMethodTest { diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod12Override.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod12Override.java index 600a52764..ade8d6433 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod12Override.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod12Override.java @@ -1,12 +1,13 @@ package io.codelaser.maddi.modification.common; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import io.codelaser.maddi.cst.api.info.TypeInfo; // @Override on the isolated method: it must override something or the frame does not compile, so the frame is // given an abstract supertype that declares the method diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod13OverrideQualified.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod13OverrideQualified.java index 737ffa20c..e434dd93c 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod13OverrideQualified.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod13OverrideQualified.java @@ -1,11 +1,12 @@ package io.codelaser.maddi.modification.common; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.TypeInfo; // the @Override supertype is a sibling of the frame, so the frame-nested types it references in the reproduced // signature must be qualified with the frame name; inside the frame those same types stay simple diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod14Hierarchy.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod14Hierarchy.java index dca708569..1b1b6a4b3 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod14Hierarchy.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod14Hierarchy.java @@ -1,12 +1,13 @@ package io.codelaser.maddi.modification.common; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import io.codelaser.maddi.cst.api.info.TypeInfo; // stub types must reproduce the supertype hierarchy: overload resolution (isEmpty(IBase) vs isEmpty(ISub)) and a // generic bound (T extends IBase accepting an ISub argument) only resolve when ISub is a subtype of IBase diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod15FieldPositions.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod15FieldPositions.java index 271fdbc3e..ada0581bf 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod15FieldPositions.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod15FieldPositions.java @@ -1,13 +1,14 @@ package io.codelaser.maddi.modification.common; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.TypeInfo; // Coverage for field references in many syntactic positions: every accessed field of a stubbed type must be // reproduced, regardless of where the access appears. This is a scaffold -- add the position that currently loses a diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod16NamespaceReferences.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod16NamespaceReferences.java index 1ee292f56..60e0428ec 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod16NamespaceReferences.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod16NamespaceReferences.java @@ -1,17 +1,18 @@ package io.codelaser.maddi.modification.common; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.Map; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; /** * A type written fully qualified in the pasted text becomes a namespace stub, nested a few levels deep diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod17ImportCollision.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod17ImportCollision.java index 837303502..ef76c45da 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod17ImportCollision.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod17ImportCollision.java @@ -1,20 +1,21 @@ package io.codelaser.maddi.modification.common; -import io.codelaser.maddi.modification.common.util.IsolateMethod; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.IOException; +import java.util.Map; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.io.IOException; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.codelaser.maddi.modification.common.util.IsolateMethod; /** * Two JDK types with the same simple name, one named simply in the pasted text and one reached only through a diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod2TypeParameters.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod2TypeParameters.java index e4ae04e53..b88bface7 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod2TypeParameters.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod2TypeParameters.java @@ -1,13 +1,14 @@ package io.codelaser.maddi.modification.common; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.TypeInfo; public class TestIsolateMethod2TypeParameters extends CommonIsolateMethodTest { diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod3TypeParameters.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod3TypeParameters.java index b9da5a842..e3256be52 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod3TypeParameters.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod3TypeParameters.java @@ -1,12 +1,13 @@ package io.codelaser.maddi.modification.common; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import io.codelaser.maddi.cst.api.info.TypeInfo; public class TestIsolateMethod3TypeParameters extends CommonIsolateMethodTest { diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod4SimpleNameCollisions.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod4SimpleNameCollisions.java index 44618ddbb..f6c81994e 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod4SimpleNameCollisions.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod4SimpleNameCollisions.java @@ -1,12 +1,13 @@ package io.codelaser.maddi.modification.common; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import io.codelaser.maddi.cst.api.info.TypeInfo; public class TestIsolateMethod4SimpleNameCollisions extends CommonIsolateMethodTest { diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod5MethodReferences.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod5MethodReferences.java index 84fad4f54..d6a784532 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod5MethodReferences.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod5MethodReferences.java @@ -1,12 +1,13 @@ package io.codelaser.maddi.modification.common; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import io.codelaser.maddi.cst.api.info.TypeInfo; // method references: a referenced method must be stubbed just like a regular call public class TestIsolateMethod5MethodReferences extends CommonIsolateMethodTest { diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod6FieldAccess.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod6FieldAccess.java index e17020911..946bd88ea 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod6FieldAccess.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod6FieldAccess.java @@ -1,12 +1,13 @@ package io.codelaser.maddi.modification.common; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import io.codelaser.maddi.cst.api.info.TypeInfo; // static field access: a field on an external type must be stubbed; a field on a JDK type must not (no mutation) public class TestIsolateMethod6FieldAccess extends CommonIsolateMethodTest { diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod7Exceptions.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod7Exceptions.java index 2f76cd3b6..8c2667e1b 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod7Exceptions.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod7Exceptions.java @@ -1,13 +1,14 @@ package io.codelaser.maddi.modification.common; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.TypeInfo; // exception types: a custom exception thrown/caught must be stubbed as a Throwable subtype so the text compiles public class TestIsolateMethod7Exceptions extends CommonIsolateMethodTest { diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod8LambdasAndAnonymousTypes.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod8LambdasAndAnonymousTypes.java index d43e3ff8f..f2322b85e 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod8LambdasAndAnonymousTypes.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod8LambdasAndAnonymousTypes.java @@ -1,12 +1,13 @@ package io.codelaser.maddi.modification.common; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import io.codelaser.maddi.cst.api.info.TypeInfo; // the visitor must descend into lambda bodies and anonymous class bodies: a reference reachable only there // (here 'Helper.process') must still be stubbed, otherwise the printed frame would not reparse diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod9Imports.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod9Imports.java index ec612bbbf..fa6fca2be 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod9Imports.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethod9Imports.java @@ -1,15 +1,16 @@ package io.codelaser.maddi.modification.common; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.util.Map; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; // real-world reproduction (OrderHelper.validateOrder): external types referenced by simple name across packages // must be nested directly in the frame, not pushed into namespace stubs (which would break simple-name resolution) diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethodCodec.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethodCodec.java index 255ba4962..01b7d61f9 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethodCodec.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateMethodCodec.java @@ -1,20 +1,21 @@ package io.codelaser.maddi.modification.common; -import io.codelaser.maddi.modification.common.util.IsolateMethod; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import io.codelaser.maddi.inspection.api.parser.ParseResult; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import io.codelaser.maddi.inspection.api.parser.ParseResult; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.codelaser.maddi.modification.common.util.IsolateMethod; @Disabled public class TestIsolateMethodCodec extends CommonTest { diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestSiblingQualifiedNestedReference.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestSiblingQualifiedNestedReference.java index 5b21cf023..a6381f034 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestSiblingQualifiedNestedReference.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestSiblingQualifiedNestedReference.java @@ -1,14 +1,15 @@ package io.codelaser.maddi.modification.common; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; /** * Known maddi-parser limitation, surfaced by {@code IsolateMethod}'s {@code @Override} supertype. diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestTypeBoundWildcardPrinting.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestTypeBoundWildcardPrinting.java index a7dc483f5..c4be0fdb4 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestTypeBoundWildcardPrinting.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestTypeBoundWildcardPrinting.java @@ -1,11 +1,12 @@ package io.codelaser.maddi.modification.common; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; // bytecode models a type-parameter bound 'T extends X' with an EXTENDS wildcard on the bound; the printer must // not render that as the invalid '' (this surfaced when IsolateMethod stubbed such a diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/defaults/TestEventualContracts.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/defaults/TestEventualContracts.java index fc6d52789..3b490ab19 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/defaults/TestEventualContracts.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/defaults/TestEventualContracts.java @@ -17,7 +17,15 @@ package io.codelaser.maddi.modification.common.defaults; -import io.codelaser.maddi.modification.common.CommonTest; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.util.Map; +import java.util.Set; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.FieldInfo; @@ -27,14 +35,7 @@ import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.Map; -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.common.CommonTest; /** * Stage 1 of eventual immutability (road to immutability §060): the {@code @Mark}/{@code @Only}/{@code @TestMark} diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/defaults/TestInheritedNullability.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/defaults/TestInheritedNullability.java index e18ec7f7a..c7a85c056 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/defaults/TestInheritedNullability.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/defaults/TestInheritedNullability.java @@ -17,7 +17,16 @@ package io.codelaser.maddi.modification.common.defaults; -import io.codelaser.maddi.modification.common.CommonTest; +import static io.codelaser.maddi.modification.common.defaults.ShallowMethodAnalyzer.*; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.type.NullableState; @@ -25,15 +34,7 @@ import io.codelaser.maddi.cst.impl.analysis.ValueImpl.NullabilityImpl; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.List; -import java.util.Map; - -import static io.codelaser.maddi.modification.common.defaults.ShallowMethodAnalyzer.*; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.modification.common.CommonTest; /** * The override rule's type-argument states do not depend on the order of {@code overrides()}, a set (maddi-mod#47): diff --git a/maddi-modification-common/src/testFixtures/java/io/codelaser/maddi/modification/common/CloneBenchCorpus.java b/maddi-modification-common/src/testFixtures/java/io/codelaser/maddi/modification/common/CloneBenchCorpus.java index 3c02778bc..597da912c 100644 --- a/maddi-modification-common/src/testFixtures/java/io/codelaser/maddi/modification/common/CloneBenchCorpus.java +++ b/maddi-modification-common/src/testFixtures/java/io/codelaser/maddi/modification/common/CloneBenchCorpus.java @@ -17,10 +17,10 @@ package io.codelaser.maddi.modification.common; -import io.codelaser.maddi.util.corpus.Corpora; - import java.nio.file.Path; +import io.codelaser.maddi.util.corpus.Corpora; + /** * Where a clone-bench project's sources are inside the {@code testarchive} corpus. * diff --git a/maddi-modification-common/src/testFixtures/java/io/codelaser/maddi/modification/common/CommonTest.java b/maddi-modification-common/src/testFixtures/java/io/codelaser/maddi/modification/common/CommonTest.java index 43ba1509e..af5680381 100644 --- a/maddi-modification-common/src/testFixtures/java/io/codelaser/maddi/modification/common/CommonTest.java +++ b/maddi-modification-common/src/testFixtures/java/io/codelaser/maddi/modification/common/CommonTest.java @@ -1,13 +1,9 @@ package io.codelaser.maddi.modification.common; -import io.codelaser.maddi.annotation.Immutable; -import io.codelaser.maddi.support.SetOnce; -import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import io.codelaser.maddi.inspection.api.integration.JavaInspectorFactory; -import io.codelaser.maddi.inspection.api.resource.InputConfiguration; -import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + import org.jetbrains.annotations.NotNull; import org.jspecify.annotations.NonNull; import org.junit.jupiter.api.Test; @@ -15,9 +11,14 @@ import org.opentest4j.AssertionFailedError; import org.slf4j.Logger; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; +import io.codelaser.maddi.annotation.Immutable; +import io.codelaser.maddi.cst.api.element.SourceSet; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import io.codelaser.maddi.inspection.api.integration.JavaInspectorFactory; +import io.codelaser.maddi.inspection.api.resource.InputConfiguration; +import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.codelaser.maddi.support.SetOnce; public class CommonTest { diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/LinkComputer.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/LinkComputer.java index fe889ed4e..84ea025b2 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/LinkComputer.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/LinkComputer.java @@ -1,12 +1,12 @@ package io.codelaser.maddi.modification.link; -import io.codelaser.maddi.modification.prepwork.variable.Links; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import java.util.List; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; - -import java.util.List; +import io.codelaser.maddi.modification.prepwork.variable.Links; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; public interface LinkComputer { // tests only! diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/AssignLinksToLocal.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/AssignLinksToLocal.java index abc5ce702..c119b685a 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/AssignLinksToLocal.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/AssignLinksToLocal.java @@ -1,9 +1,9 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.prepwork.variable.Links; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.api.variable.Variable; +import io.codelaser.maddi.modification.prepwork.variable.Links; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; public record AssignLinksToLocal(Runtime runtime) { diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ExpressionVisitor.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ExpressionVisitor.java index 79edc11bf..006e811ad 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ExpressionVisitor.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ExpressionVisitor.java @@ -1,21 +1,16 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.common.FunctionTypes; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.jetbrains.annotations.NotNull; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import io.codelaser.maddi.modification.common.util.TolerantWrite; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.link.impl.localvar.FunctionalInterfaceVariable; -import io.codelaser.maddi.modification.link.impl.localvar.IntermediateVariable; -import io.codelaser.maddi.modification.link.impl.localvar.MarkerVariable; -import io.codelaser.maddi.modification.link.impl.translate.VariableTranslationMap; -import io.codelaser.maddi.modification.link.impl.translate.VirtualFieldTranslationMapForMethodParameters; -import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; -import io.codelaser.maddi.modification.link.vf.VirtualFields; -import io.codelaser.maddi.modification.prepwork.Util; -import io.codelaser.maddi.modification.prepwork.variable.*; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.RecordPattern; import io.codelaser.maddi.cst.api.expression.*; @@ -28,18 +23,22 @@ import io.codelaser.maddi.cst.api.translate.TranslationMap; import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.*; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import org.jetbrains.annotations.NotNull; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.*; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import io.codelaser.maddi.modification.common.FunctionTypes; +import io.codelaser.maddi.modification.common.util.TolerantWrite; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.link.impl.localvar.FunctionalInterfaceVariable; +import io.codelaser.maddi.modification.link.impl.localvar.IntermediateVariable; +import io.codelaser.maddi.modification.link.impl.localvar.MarkerVariable; +import io.codelaser.maddi.modification.link.impl.translate.VariableTranslationMap; +import io.codelaser.maddi.modification.link.impl.translate.VirtualFieldTranslationMapForMethodParameters; +import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; +import io.codelaser.maddi.modification.link.vf.VirtualFields; +import io.codelaser.maddi.modification.prepwork.Util; +import io.codelaser.maddi.modification.prepwork.variable.*; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; public record ExpressionVisitor(Runtime runtime, JavaInspector javaInspector, diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ForEach.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ForEach.java index d97dead28..144305c14 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ForEach.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ForEach.java @@ -1,16 +1,16 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.prepwork.variable.Stage; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; +import java.util.Iterator; +import java.util.List; + import io.codelaser.maddi.cst.api.expression.Expression; import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.api.type.ParameterizedType; - -import java.util.Iterator; -import java.util.List; +import io.codelaser.maddi.modification.prepwork.variable.Stage; +import io.codelaser.maddi.modification.prepwork.variable.VariableData; public record ForEach(Runtime runtime, ExpressionVisitor expressionVisitor) { diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkAppliedFunctionalInterface.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkAppliedFunctionalInterface.java index 182985034..edac94138 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkAppliedFunctionalInterface.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkAppliedFunctionalInterface.java @@ -1,16 +1,9 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.common.FunctionTypes; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.link.impl.linkgraph.FollowGraph; -import io.codelaser.maddi.modification.link.impl.linkgraph.Graph; -import io.codelaser.maddi.modification.link.impl.linkgraph.LinkGraph; -import io.codelaser.maddi.modification.link.impl.localvar.AppliedFunctionalInterfaceVariable; -import io.codelaser.maddi.modification.link.impl.localvar.FunctionalInterfaceVariable; -import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; -import io.codelaser.maddi.modification.prepwork.variable.*; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.runtime.Runtime; @@ -20,10 +13,13 @@ import io.codelaser.maddi.cst.api.variable.LocalVariable; import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.inspection.api.integration.JavaInspector; - -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; +import io.codelaser.maddi.modification.common.FunctionTypes; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.link.impl.localvar.AppliedFunctionalInterfaceVariable; +import io.codelaser.maddi.modification.link.impl.localvar.FunctionalInterfaceVariable; +import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; +import io.codelaser.maddi.modification.prepwork.variable.*; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; /* Part of the LinkMethodCall code, objectToReturnValue. diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkComputerImpl.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkComputerImpl.java index 1119b6f6e..86ef4d95d 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkComputerImpl.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkComputerImpl.java @@ -1,5 +1,39 @@ package io.codelaser.maddi.modification.link.impl; +import static io.codelaser.maddi.modification.link.impl.ExpressionVisitor.EMPTY; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static io.codelaser.maddi.modification.prepwork.variable.impl.VariableInfoImpl.DOWNCAST_VARIABLE; +import static io.codelaser.maddi.modification.prepwork.variable.impl.VariableInfoImpl.UNMODIFIED_VARIABLE; + +import java.util.*; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.jetbrains.annotations.NotNull; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.cst.api.analysis.Codec; +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.element.Element; +import io.codelaser.maddi.cst.api.expression.Assignment; +import io.codelaser.maddi.cst.api.expression.Expression; +import io.codelaser.maddi.cst.api.expression.MethodCall; +import io.codelaser.maddi.cst.api.expression.NullConstant; +import io.codelaser.maddi.cst.api.expression.VariableExpression; +import io.codelaser.maddi.cst.api.info.InfoMapView; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.*; +import io.codelaser.maddi.cst.api.translate.TranslationMap; +import io.codelaser.maddi.cst.api.variable.*; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.graph.util.TimedLogger; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.modification.common.defaults.ShallowMethodAnalyzer; import io.codelaser.maddi.modification.common.util.OwnStaticState; import io.codelaser.maddi.modification.common.util.TolerantWrite; @@ -21,40 +55,6 @@ import io.codelaser.maddi.modification.prepwork.variable.impl.ReturnVariableImpl; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableInfoImpl; -import io.codelaser.maddi.cst.api.analysis.Codec; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.element.Element; -import io.codelaser.maddi.cst.api.expression.Assignment; -import io.codelaser.maddi.cst.api.expression.Expression; -import io.codelaser.maddi.cst.api.expression.MethodCall; -import io.codelaser.maddi.cst.api.expression.NullConstant; -import io.codelaser.maddi.cst.api.expression.VariableExpression; -import io.codelaser.maddi.cst.api.info.InfoMap; -import io.codelaser.maddi.cst.api.info.InfoMapView; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.*; -import io.codelaser.maddi.cst.api.translate.TranslationMap; -import io.codelaser.maddi.cst.api.variable.*; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import io.codelaser.maddi.graph.util.TimedLogger; -import org.jetbrains.annotations.NotNull; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.*; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static io.codelaser.maddi.modification.link.impl.ExpressionVisitor.EMPTY; -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static io.codelaser.maddi.modification.prepwork.variable.impl.VariableInfoImpl.DOWNCAST_VARIABLE; -import static io.codelaser.maddi.modification.prepwork.variable.impl.VariableInfoImpl.UNMODIFIED_VARIABLE; /* convention: diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkComputerRecursion.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkComputerRecursion.java index 4ec4bb505..777fa83d1 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkComputerRecursion.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkComputerRecursion.java @@ -1,8 +1,8 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; interface LinkComputerRecursion { void doAnonymousType(TypeInfo typeInfo); diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkFactsImpl.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkFactsImpl.java index 91833a3a0..4d643c6e4 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkFactsImpl.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkFactsImpl.java @@ -17,6 +17,12 @@ package io.codelaser.maddi.modification.link.impl; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; @@ -31,12 +37,6 @@ import io.codelaser.maddi.modification.prepwork.variable.ObjectCreationVariable; import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; -import java.util.HashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - /** * {@link LinkFacts} read off {@link MethodLinkedVariablesImpl#METHOD_LINKS}, the links of a method's return value * (linking manual §6): a link FROM the return variable itself ({@code get ∈ 0:list.§xs}, {@code read ← 0:box.t}, diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkFunctionalInterface.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkFunctionalInterface.java index 10606cbb9..d6c05a714 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkFunctionalInterface.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkFunctionalInterface.java @@ -1,14 +1,16 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.link.impl.translate.VariableTranslationMap; -import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; -import io.codelaser.maddi.modification.link.vf.VirtualFields; -import io.codelaser.maddi.modification.prepwork.Util; -import io.codelaser.maddi.modification.prepwork.variable.Link; -import io.codelaser.maddi.modification.prepwork.variable.LinkNature; -import io.codelaser.maddi.modification.prepwork.variable.Links; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; -import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; +import static io.codelaser.maddi.modification.link.impl.LinkNatureImpl.CONTAINS_AS_MEMBER; +import static io.codelaser.maddi.modification.prepwork.Util.virtual; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; @@ -20,16 +22,15 @@ import io.codelaser.maddi.cst.api.variable.DependentVariable; import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.Variable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - -import static io.codelaser.maddi.modification.link.impl.LinkNatureImpl.CONTAINS_AS_MEMBER; -import static io.codelaser.maddi.modification.prepwork.Util.virtual; +import io.codelaser.maddi.modification.link.impl.translate.VariableTranslationMap; +import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; +import io.codelaser.maddi.modification.link.vf.VirtualFields; +import io.codelaser.maddi.modification.prepwork.Util; +import io.codelaser.maddi.modification.prepwork.variable.Link; +import io.codelaser.maddi.modification.prepwork.variable.LinkNature; +import io.codelaser.maddi.modification.prepwork.variable.Links; +import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; /** * The FI lifting engine: given the links of the lambda/method-reference bound to an FI parameter (the wrapped diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkMethodCall.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkMethodCall.java index 76116ccdb..e3f8d3211 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkMethodCall.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkMethodCall.java @@ -1,28 +1,22 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.common.FunctionTypes; +import static io.codelaser.maddi.modification.link.vf.VirtualFieldComputer.collectTypeParametersFromVirtualField; + +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Function; +import java.util.stream.Stream; + +import org.jetbrains.annotations.NotNull; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.link.impl.localvar.AppliedFunctionalInterfaceVariable; -import io.codelaser.maddi.modification.link.impl.localvar.FunctionalInterfaceVariable; -import io.codelaser.maddi.modification.link.impl.localvar.IntermediateVariable; -import io.codelaser.maddi.modification.link.impl.translate.VariableTranslationMap; -import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; -import io.codelaser.maddi.modification.link.vf.VirtualFields; -import io.codelaser.maddi.modification.prepwork.Util; import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.info.TypeParameter; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import io.codelaser.maddi.modification.prepwork.variable.*; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; -import io.codelaser.maddi.modification.prepwork.variable.impl.ObjectCreationVariableImpl; import io.codelaser.maddi.cst.api.expression.ConstructorCall; import io.codelaser.maddi.cst.api.expression.VariableExpression; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.info.TypeParameter; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.api.translate.TranslationMap; import io.codelaser.maddi.cst.api.type.ParameterizedType; @@ -30,15 +24,21 @@ import io.codelaser.maddi.cst.api.variable.LocalVariable; import io.codelaser.maddi.cst.api.variable.This; import io.codelaser.maddi.cst.api.variable.Variable; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import org.jetbrains.annotations.NotNull; - -import java.util.*; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.function.Function; -import java.util.stream.Stream; - -import static io.codelaser.maddi.modification.link.vf.VirtualFieldComputer.collectTypeParametersFromVirtualField; +import io.codelaser.maddi.modification.common.FunctionTypes; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.link.impl.localvar.AppliedFunctionalInterfaceVariable; +import io.codelaser.maddi.modification.link.impl.localvar.FunctionalInterfaceVariable; +import io.codelaser.maddi.modification.link.impl.localvar.IntermediateVariable; +import io.codelaser.maddi.modification.link.impl.translate.VariableTranslationMap; +import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; +import io.codelaser.maddi.modification.link.vf.VirtualFields; +import io.codelaser.maddi.modification.prepwork.Util; +import io.codelaser.maddi.modification.prepwork.variable.*; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; +import io.codelaser.maddi.modification.prepwork.variable.impl.ObjectCreationVariableImpl; public record LinkMethodCall(JavaInspector javaInspector, Runtime runtime, diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkNatureImpl.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkNatureImpl.java index c7a7ece51..10fb480bc 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkNatureImpl.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkNatureImpl.java @@ -1,10 +1,11 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.prepwork.variable.LinkNature; -import io.codelaser.maddi.cst.api.info.MethodInfo; +import java.util.*; + import org.jetbrains.annotations.NotNull; -import java.util.*; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.modification.prepwork.variable.LinkNature; //https://unicodemap.com/range/47/Mathematical_Operators/ diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkedVariablesImpl.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkedVariablesImpl.java index 9933c3908..cc7466f79 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkedVariablesImpl.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkedVariablesImpl.java @@ -1,16 +1,17 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.prepwork.Util; -import io.codelaser.maddi.modification.prepwork.variable.LinkedVariables; -import io.codelaser.maddi.modification.prepwork.variable.Links; -import io.codelaser.maddi.cst.api.variable.Variable; -import org.jetbrains.annotations.NotNull; - import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.stream.Collectors; +import org.jetbrains.annotations.NotNull; + +import io.codelaser.maddi.cst.api.variable.Variable; +import io.codelaser.maddi.modification.prepwork.Util; +import io.codelaser.maddi.modification.prepwork.variable.LinkedVariables; +import io.codelaser.maddi.modification.prepwork.variable.Links; + public record LinkedVariablesImpl(Map links) implements LinkedVariables { // NOTE (2026-08-01, bistability investigation, docs/design/eventual-info-hierarchy.md): an FQN-sorted diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/MethodLinkedVariablesImpl.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/MethodLinkedVariablesImpl.java index 8838841f3..e0509ee87 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/MethodLinkedVariablesImpl.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/MethodLinkedVariablesImpl.java @@ -1,26 +1,26 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.link.impl.localvar.IntermediateVariable; -import io.codelaser.maddi.modification.link.impl.localvar.MarkerVariable; -import io.codelaser.maddi.modification.prepwork.variable.LinkNature; -import io.codelaser.maddi.modification.prepwork.variable.Links; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; + +import org.jetbrains.annotations.NotNull; + import io.codelaser.maddi.cst.api.analysis.Codec; import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.info.InfoMap; import io.codelaser.maddi.cst.api.info.InfoMapView; import io.codelaser.maddi.cst.api.translate.TranslationMap; import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.Set; -import java.util.stream.Collectors; +import io.codelaser.maddi.modification.link.impl.localvar.IntermediateVariable; +import io.codelaser.maddi.modification.link.impl.localvar.MarkerVariable; +import io.codelaser.maddi.modification.prepwork.variable.LinkNature; +import io.codelaser.maddi.modification.prepwork.variable.Links; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; public class MethodLinkedVariablesImpl implements MethodLinkedVariables, Value { private final static MethodLinkedVariables EMPTY = new MethodLinkedVariablesImpl(LinksImpl.EMPTY, List.of(), Set.of()); diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/MethodModification.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/MethodModification.java index d233db1df..6a7d132fa 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/MethodModification.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/MethodModification.java @@ -1,10 +1,15 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.link.impl.translate.VariableTranslationMap; -import io.codelaser.maddi.modification.prepwork.Util; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.modification.prepwork.variable.Stage; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.expression.Expression; import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.expression.MethodReference; @@ -14,16 +19,12 @@ import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.api.translate.TranslationMap; import io.codelaser.maddi.cst.api.type.ParameterizedType; -import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.variable.Variable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.function.BiConsumer; -import java.util.function.Consumer; +import io.codelaser.maddi.modification.link.impl.translate.VariableTranslationMap; +import io.codelaser.maddi.modification.prepwork.Util; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import io.codelaser.maddi.modification.prepwork.variable.Stage; +import io.codelaser.maddi.modification.prepwork.variable.VariableData; /** * @param currentMethod the method whose body contains {@code mc} diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/PassedFunction.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/PassedFunction.java index 0becb98fd..18234f208 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/PassedFunction.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/PassedFunction.java @@ -17,6 +17,11 @@ package io.codelaser.maddi.modification.link.impl; +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.expression.Expression; import io.codelaser.maddi.cst.api.expression.Lambda; @@ -38,11 +43,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; -import java.util.ArrayList; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; - /** * Call-site specialisation of a parameter that a method modifies only by handing it to one of its own functional * parameters ({@link PropertyImpl#MODIFIED_THROUGH_PASSED_FUNCTION}). vavr's {@code Value.toQueue()} calls diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ReceiverLevel.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ReceiverLevel.java index dda1c2fad..15e13021d 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ReceiverLevel.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ReceiverLevel.java @@ -17,6 +17,14 @@ package io.codelaser.maddi.modification.link.impl; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.function.Consumer; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.expression.AnnotationExpression; import io.codelaser.maddi.cst.api.info.Info; @@ -28,13 +36,6 @@ import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.List; -import java.util.Set; -import java.util.function.Consumer; /** * The receiver of a call decides, next to the callee, whether the call modifies it. Two rules, both sound, diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/RecursionPrevention.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/RecursionPrevention.java index 8bfafab42..ff7843376 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/RecursionPrevention.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/RecursionPrevention.java @@ -1,14 +1,15 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.cst.api.info.MethodInfo; + // used in LinkComputerImpl, to facilitate on-the-fly link computation class RecursionPrevention { private static final Logger LOGGER = LoggerFactory.getLogger(RecursionPrevention.class); diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/Result.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/Result.java index 426d087ff..22f231e8a 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/Result.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/Result.java @@ -1,18 +1,19 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.link.impl.localvar.FunctionalInterfaceVariable; -import io.codelaser.maddi.modification.prepwork.variable.Link; -import io.codelaser.maddi.modification.prepwork.variable.LinkedVariables; -import io.codelaser.maddi.modification.prepwork.variable.Links; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; +import java.util.*; + +import org.jetbrains.annotations.NotNull; + import io.codelaser.maddi.cst.api.expression.Expression; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.variable.LocalVariable; import io.codelaser.maddi.cst.api.variable.Variable; -import org.jetbrains.annotations.NotNull; - -import java.util.*; +import io.codelaser.maddi.modification.link.impl.localvar.FunctionalInterfaceVariable; +import io.codelaser.maddi.modification.prepwork.variable.Link; +import io.codelaser.maddi.modification.prepwork.variable.LinkedVariables; +import io.codelaser.maddi.modification.prepwork.variable.Links; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; /* primary = end result diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ShallowMethodLinkComputer.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ShallowMethodLinkComputer.java index b3bbbfb9d..b6700bcd5 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ShallowMethodLinkComputer.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ShallowMethodLinkComputer.java @@ -1,15 +1,17 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.common.AnalysisHelper; -import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; -import io.codelaser.maddi.modification.link.vf.VirtualFields; -import io.codelaser.maddi.modification.prepwork.Util; -import io.codelaser.maddi.modification.prepwork.variable.LinkNature; -import io.codelaser.maddi.modification.prepwork.variable.Links; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; -import io.codelaser.maddi.modification.prepwork.variable.impl.ReturnVariableImpl; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.GET_SET_FIELD; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_METHOD; +import static io.codelaser.maddi.modification.link.impl.LinkNatureImpl.*; +import static io.codelaser.maddi.modification.link.vf.VirtualFieldComputer.collectTypeParametersFromVirtualField; + +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.expression.Expression; import io.codelaser.maddi.cst.api.expression.VariableExpression; @@ -25,17 +27,16 @@ import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.inspection.api.parser.GenericsHelper; import io.codelaser.maddi.inspection.impl.parser.GenericsHelperImpl; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.*; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static io.codelaser.maddi.modification.link.impl.LinkNatureImpl.*; -import static io.codelaser.maddi.modification.link.vf.VirtualFieldComputer.collectTypeParametersFromVirtualField; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.GET_SET_FIELD; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_METHOD; +import io.codelaser.maddi.modification.common.AnalysisHelper; +import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; +import io.codelaser.maddi.modification.link.vf.VirtualFields; +import io.codelaser.maddi.modification.prepwork.Util; +import io.codelaser.maddi.modification.prepwork.variable.LinkNature; +import io.codelaser.maddi.modification.prepwork.variable.Links; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; +import io.codelaser.maddi.modification.prepwork.variable.impl.ReturnVariableImpl; /* rules for ⊆ instead of ≡, ~ diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/SliceFactory.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/SliceFactory.java index 1d3bfdf79..1d513d220 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/SliceFactory.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/SliceFactory.java @@ -1,7 +1,5 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.common.FunctionTypes; - import io.codelaser.maddi.cst.api.expression.VariableExpression; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -11,6 +9,7 @@ import io.codelaser.maddi.cst.api.variable.DependentVariable; import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.Variable; +import io.codelaser.maddi.modification.common.FunctionTypes; public class SliceFactory { diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/WriteLinksAndModification.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/WriteLinksAndModification.java index 853ffce77..8a444778e 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/WriteLinksAndModification.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/WriteLinksAndModification.java @@ -1,39 +1,40 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.common.util.TolerantWrite; -import io.codelaser.maddi.modification.common.AnalysisHelper; -import io.codelaser.maddi.modification.link.impl.graph.Fact; -import io.codelaser.maddi.modification.link.impl.linkgraph.FollowGraph; -import io.codelaser.maddi.modification.link.impl.linkgraph.RedundantLinks; -import io.codelaser.maddi.modification.link.impl.localvar.IntermediateVariable; -import io.codelaser.maddi.modification.link.impl.localvar.MarkerVariable; -import io.codelaser.maddi.modification.link.impl.localvar.SharedVariable; -import io.codelaser.maddi.modification.link.impl.translate.VariableTranslationMap; -import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; -import io.codelaser.maddi.modification.prepwork.Util; -import io.codelaser.maddi.modification.prepwork.variable.*; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; +import static io.codelaser.maddi.modification.link.impl.LinkNatureImpl.*; +import static io.codelaser.maddi.modification.prepwork.variable.impl.VariableInfoImpl.STRUCTURALLY_UNMODIFIED_VARIABLE; +import static io.codelaser.maddi.modification.prepwork.variable.impl.VariableInfoImpl.UNMODIFIED_VARIABLE; + +import java.util.*; +import java.util.stream.Stream; + +import org.jetbrains.annotations.NotNull; + import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.expression.VariableExpression; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.DependentVariable; -import io.codelaser.maddi.cst.api.expression.VariableExpression; import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.This; import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import org.jetbrains.annotations.NotNull; - -import java.util.*; -import java.util.stream.Stream; - -import static io.codelaser.maddi.modification.link.impl.LinkNatureImpl.*; -import static io.codelaser.maddi.modification.prepwork.variable.impl.VariableInfoImpl.STRUCTURALLY_UNMODIFIED_VARIABLE; -import static io.codelaser.maddi.modification.prepwork.variable.impl.VariableInfoImpl.UNMODIFIED_VARIABLE; +import io.codelaser.maddi.modification.common.AnalysisHelper; +import io.codelaser.maddi.modification.common.util.TolerantWrite; +import io.codelaser.maddi.modification.link.impl.graph.Fact; +import io.codelaser.maddi.modification.link.impl.linkgraph.FollowGraph; +import io.codelaser.maddi.modification.link.impl.linkgraph.RedundantLinks; +import io.codelaser.maddi.modification.link.impl.localvar.IntermediateVariable; +import io.codelaser.maddi.modification.link.impl.localvar.MarkerVariable; +import io.codelaser.maddi.modification.link.impl.localvar.SharedVariable; +import io.codelaser.maddi.modification.link.impl.translate.VariableTranslationMap; +import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; +import io.codelaser.maddi.modification.prepwork.Util; +import io.codelaser.maddi.modification.prepwork.variable.*; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; class WriteLinksAndModification { private final Runtime runtime; diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/graph/Fact.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/graph/Fact.java index b99faa39d..6e4bf18f9 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/graph/Fact.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/graph/Fact.java @@ -1,10 +1,10 @@ package io.codelaser.maddi.modification.link.impl.graph; -import org.jetbrains.annotations.NotNull; - import java.util.Objects; import java.util.function.Function; +import org.jetbrains.annotations.NotNull; + /* IMPORTANT: equality is on source+target, because of the map in WitnessIndex If we don't do that, we cannot find a "better" witness. diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/graph/IncrementalFixpointEngine.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/graph/IncrementalFixpointEngine.java index 8aff440fb..fb2c6bc71 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/graph/IncrementalFixpointEngine.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/graph/IncrementalFixpointEngine.java @@ -1,9 +1,5 @@ package io.codelaser.maddi.modification.link.impl.graph; -import io.codelaser.maddi.modification.link.impl.Gate; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.util.*; import java.util.function.BiPredicate; import java.util.function.BinaryOperator; @@ -13,6 +9,11 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.modification.link.impl.Gate; + /* Features: diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/graph/Witness.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/graph/Witness.java index 23e3f6d89..bb22e692a 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/graph/Witness.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/graph/Witness.java @@ -1,12 +1,12 @@ package io.codelaser.maddi.modification.link.impl.graph; -import org.jetbrains.annotations.NotNull; - import java.util.HashSet; import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; +import org.jetbrains.annotations.NotNull; + // explains how a certain fact was derived public sealed interface Witness permits Witness.DirectWitness, Witness.CompositeWitness { diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/Edge.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/Edge.java index b00dfa3fc..c583e9aff 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/Edge.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/Edge.java @@ -1,9 +1,10 @@ package io.codelaser.maddi.modification.link.impl.linkgraph; +import org.jetbrains.annotations.NotNull; + +import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.modification.prepwork.Util; import io.codelaser.maddi.modification.prepwork.variable.LinkNature; -import io.codelaser.maddi.cst.api.variable.Variable; -import org.jetbrains.annotations.NotNull; record Edge(Variable from, LinkNature linkNature, Variable to) { @Override diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/ExpandSlice.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/ExpandSlice.java index 5b8a45508..39f1cc7a7 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/ExpandSlice.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/ExpandSlice.java @@ -1,8 +1,10 @@ package io.codelaser.maddi.modification.link.impl.linkgraph; -import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; -import io.codelaser.maddi.modification.prepwork.Util; -import io.codelaser.maddi.modification.prepwork.variable.LinkNature; +import static io.codelaser.maddi.modification.prepwork.Util.virtual; + +import java.util.*; +import java.util.stream.Collectors; + import io.codelaser.maddi.cst.api.expression.Expression; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -10,11 +12,9 @@ import io.codelaser.maddi.cst.api.variable.DependentVariable; import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.Variable; - -import java.util.*; -import java.util.stream.Collectors; - -import static io.codelaser.maddi.modification.prepwork.Util.virtual; +import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; +import io.codelaser.maddi.modification.prepwork.Util; +import io.codelaser.maddi.modification.prepwork.variable.LinkNature; record ExpandSlice(Graph graph) { diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/FollowGraph.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/FollowGraph.java index 483062c5c..2948af7cc 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/FollowGraph.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/FollowGraph.java @@ -1,5 +1,14 @@ package io.codelaser.maddi.modification.link.impl.linkgraph; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Stream; + +import io.codelaser.maddi.cst.api.variable.This; +import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.modification.link.impl.Gate; import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; import io.codelaser.maddi.modification.link.impl.localvar.MarkerVariable; @@ -10,15 +19,6 @@ import io.codelaser.maddi.modification.prepwork.variable.Links; import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; -import io.codelaser.maddi.cst.api.variable.This; -import io.codelaser.maddi.cst.api.variable.Variable; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Stream; public record FollowGraph(Graph graph) { // sorting is needed to consistently take the same direction for tests diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/Graph.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/Graph.java index f8bb342c5..75b4820b5 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/Graph.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/Graph.java @@ -1,13 +1,24 @@ package io.codelaser.maddi.modification.link.impl.linkgraph; +import static io.codelaser.maddi.modification.link.impl.LinkNatureImpl.CONTAINS_AS_FIELD; + +import java.util.*; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import io.codelaser.maddi.cst.api.runtime.Runtime; +import io.codelaser.maddi.cst.api.variable.DependentVariable; +import io.codelaser.maddi.cst.api.variable.FieldReference; +import io.codelaser.maddi.cst.api.variable.This; +import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.modification.link.impl.Gate; import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; +import io.codelaser.maddi.modification.link.impl.graph.DegradedAnalysisException; import io.codelaser.maddi.modification.link.impl.graph.Fact; import io.codelaser.maddi.modification.link.impl.graph.IncrementalFixpointEngine; import io.codelaser.maddi.modification.link.impl.graph.LabeledGraph; -import io.codelaser.maddi.modification.prepwork.variable.ObjectCreationVariable; -import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; -import io.codelaser.maddi.modification.link.impl.graph.DegradedAnalysisException; import io.codelaser.maddi.modification.link.impl.localvar.IntermediateVariable; import io.codelaser.maddi.modification.link.impl.localvar.MarkerVariable; import io.codelaser.maddi.modification.link.impl.localvar.SharedVariable; @@ -15,20 +26,9 @@ import io.codelaser.maddi.modification.prepwork.Util; import io.codelaser.maddi.modification.prepwork.variable.Link; import io.codelaser.maddi.modification.prepwork.variable.LinkNature; +import io.codelaser.maddi.modification.prepwork.variable.ObjectCreationVariable; +import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; -import io.codelaser.maddi.cst.api.runtime.Runtime; -import io.codelaser.maddi.cst.api.variable.DependentVariable; -import io.codelaser.maddi.cst.api.variable.FieldReference; -import io.codelaser.maddi.cst.api.variable.This; -import io.codelaser.maddi.cst.api.variable.Variable; - -import java.util.*; -import java.util.function.Function; -import java.util.function.Predicate; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static io.codelaser.maddi.modification.link.impl.LinkNatureImpl.CONTAINS_AS_FIELD; public class Graph { private final Runtime runtime; diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/LinkGraph.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/LinkGraph.java index 6522ec1d5..58b2d5086 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/LinkGraph.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/LinkGraph.java @@ -1,34 +1,34 @@ package io.codelaser.maddi.modification.link.impl.linkgraph; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.runtime.Runtime; +import io.codelaser.maddi.cst.api.translate.TranslationMap; +import io.codelaser.maddi.cst.api.variable.DependentVariable; +import io.codelaser.maddi.cst.api.variable.FieldReference; +import io.codelaser.maddi.cst.api.variable.This; +import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.modification.link.impl.Gate; import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; import io.codelaser.maddi.modification.link.impl.graph.DegradedAnalysisException; import io.codelaser.maddi.modification.link.impl.localvar.IntermediateVariable; -import io.codelaser.maddi.modification.link.impl.localvar.MarkerVariable; import io.codelaser.maddi.modification.link.impl.translate.VariableTranslationMap; import io.codelaser.maddi.modification.prepwork.Util; import io.codelaser.maddi.modification.prepwork.variable.Link; import io.codelaser.maddi.modification.prepwork.variable.Links; import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.runtime.Runtime; -import io.codelaser.maddi.cst.api.translate.TranslationMap; -import io.codelaser.maddi.cst.api.variable.DependentVariable; -import io.codelaser.maddi.cst.api.variable.FieldReference; -import io.codelaser.maddi.cst.api.variable.This; -import io.codelaser.maddi.cst.api.variable.Variable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; public class LinkGraph { final Runtime runtime; diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/MakeGraph.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/MakeGraph.java index 650d060c5..bc3b16eb5 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/MakeGraph.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/MakeGraph.java @@ -1,13 +1,10 @@ package io.codelaser.maddi.modification.link.impl.linkgraph; -import io.codelaser.maddi.modification.common.AnalysisHelper; -import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; -import io.codelaser.maddi.modification.link.impl.localvar.FunctionalInterfaceVariable; -import io.codelaser.maddi.modification.link.impl.localvar.MarkerVariable; -import io.codelaser.maddi.modification.link.impl.translate.VariableTranslationMap; -import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; -import io.codelaser.maddi.modification.prepwork.Util; -import io.codelaser.maddi.modification.prepwork.variable.LinkNature; +import java.util.*; +import java.util.stream.Collectors; + +import org.jetbrains.annotations.NotNull; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.expression.IntConstant; import io.codelaser.maddi.cst.api.expression.NullConstant; @@ -18,10 +15,14 @@ import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import org.jetbrains.annotations.NotNull; - -import java.util.*; -import java.util.stream.Collectors; +import io.codelaser.maddi.modification.common.AnalysisHelper; +import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; +import io.codelaser.maddi.modification.link.impl.localvar.FunctionalInterfaceVariable; +import io.codelaser.maddi.modification.link.impl.localvar.MarkerVariable; +import io.codelaser.maddi.modification.link.impl.translate.VariableTranslationMap; +import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; +import io.codelaser.maddi.modification.prepwork.Util; +import io.codelaser.maddi.modification.prepwork.variable.LinkNature; public record MakeGraph(JavaInspector javaInspector, Runtime runtime, Graph graph) { diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/RedundantLinks.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/RedundantLinks.java index b2e819482..3c9c0bd84 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/RedundantLinks.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/RedundantLinks.java @@ -1,14 +1,14 @@ package io.codelaser.maddi.modification.link.impl.linkgraph; +import static io.codelaser.maddi.modification.link.impl.LinkNatureImpl.*; + +import java.util.*; + +import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.modification.link.impl.localvar.AppliedFunctionalInterfaceVariable; import io.codelaser.maddi.modification.link.impl.localvar.FunctionalInterfaceVariable; import io.codelaser.maddi.modification.prepwork.variable.LinkNature; import io.codelaser.maddi.modification.prepwork.variable.Links; -import io.codelaser.maddi.cst.api.variable.Variable; - -import java.util.*; - -import static io.codelaser.maddi.modification.link.impl.LinkNatureImpl.*; /* Ported from the pre-sv engine (openjdk branch, graph/RedundantLinks): a cross-variable, per-statement diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/SharedVariables.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/SharedVariables.java index 7503eae5b..43d095a22 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/SharedVariables.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/SharedVariables.java @@ -1,5 +1,17 @@ package io.codelaser.maddi.modification.link.impl.linkgraph; +import java.util.Collection; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import io.codelaser.maddi.cst.api.runtime.Runtime; +import io.codelaser.maddi.cst.api.variable.FieldReference; +import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.modification.link.impl.Gate; import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; import io.codelaser.maddi.modification.link.impl.localvar.IntermediateVariable; @@ -8,18 +20,6 @@ import io.codelaser.maddi.modification.prepwork.Util; import io.codelaser.maddi.modification.prepwork.variable.Link; import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; -import io.codelaser.maddi.cst.api.runtime.Runtime; -import io.codelaser.maddi.cst.api.variable.FieldReference; -import io.codelaser.maddi.cst.api.variable.Variable; - -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; -import java.util.stream.Stream; // variant on EquivalenceGroup, to be used for equivalent SharedVariable objects public class SharedVariables { diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/VirtualModificationIdenticals.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/VirtualModificationIdenticals.java index 1bca9686f..88c9b6253 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/VirtualModificationIdenticals.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/VirtualModificationIdenticals.java @@ -1,11 +1,5 @@ package io.codelaser.maddi.modification.link.impl.linkgraph; -import io.codelaser.maddi.modification.prepwork.Util; -import io.codelaser.maddi.modification.prepwork.variable.Link; -import io.codelaser.maddi.modification.prepwork.variable.LinkNature; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; -import io.codelaser.maddi.cst.api.variable.Variable; - import java.util.HashMap; import java.util.LinkedHashSet; import java.util.Map; @@ -15,6 +9,12 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +import io.codelaser.maddi.cst.api.variable.Variable; +import io.codelaser.maddi.modification.prepwork.Util; +import io.codelaser.maddi.modification.prepwork.variable.Link; +import io.codelaser.maddi.modification.prepwork.variable.LinkNature; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; + public class VirtualModificationIdenticals { public record Group(LinkNature linkNature, Set members) { diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/AppliedFunctionalInterfaceVariable.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/AppliedFunctionalInterfaceVariable.java index 76e3d0de5..5bf46f995 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/AppliedFunctionalInterfaceVariable.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/AppliedFunctionalInterfaceVariable.java @@ -1,13 +1,13 @@ package io.codelaser.maddi.modification.link.impl.localvar; -import io.codelaser.maddi.modification.link.impl.LinkVariable; -import io.codelaser.maddi.modification.link.impl.Result; +import java.util.List; + import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.LocalVariable; - -import java.util.List; +import io.codelaser.maddi.modification.link.impl.LinkVariable; +import io.codelaser.maddi.modification.link.impl.Result; public class AppliedFunctionalInterfaceVariable extends MarkerVariable implements LocalVariable, LinkVariable { public static final String LABEL = "afi"; diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/FunctionalInterfaceVariable.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/FunctionalInterfaceVariable.java index 0eff38eb7..9ddf708e6 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/FunctionalInterfaceVariable.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/FunctionalInterfaceVariable.java @@ -1,10 +1,10 @@ package io.codelaser.maddi.modification.link.impl.localvar; -import io.codelaser.maddi.modification.link.impl.LinkVariable; -import io.codelaser.maddi.modification.link.impl.Result; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.LocalVariable; +import io.codelaser.maddi.modification.link.impl.LinkVariable; +import io.codelaser.maddi.modification.link.impl.Result; public class FunctionalInterfaceVariable extends MarkerVariable implements LocalVariable, LinkVariable { public static final String LABEL = "fi"; diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/IntermediateVariable.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/IntermediateVariable.java index 572807024..e3002c733 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/IntermediateVariable.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/IntermediateVariable.java @@ -1,11 +1,11 @@ package io.codelaser.maddi.modification.link.impl.localvar; -import io.codelaser.maddi.modification.link.impl.LinkVariable; import io.codelaser.maddi.cst.api.expression.Expression; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.LocalVariable; import io.codelaser.maddi.cst.impl.variable.LocalVariableImpl; +import io.codelaser.maddi.modification.link.impl.LinkVariable; public class IntermediateVariable extends LocalVariableImpl implements LocalVariable, LinkVariable { public static final String PREFIX = "$__"; diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/MarkerVariable.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/MarkerVariable.java index b42f49790..981fef2f3 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/MarkerVariable.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/MarkerVariable.java @@ -1,11 +1,11 @@ package io.codelaser.maddi.modification.link.impl.localvar; -import io.codelaser.maddi.modification.link.impl.LinkVariable; import io.codelaser.maddi.cst.api.expression.Expression; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.LocalVariable; import io.codelaser.maddi.cst.impl.variable.LocalVariableImpl; +import io.codelaser.maddi.modification.link.impl.LinkVariable; public class MarkerVariable extends LocalVariableImpl implements LocalVariable, LinkVariable { public static final String PREFIX = "$_"; diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/SharedVariable.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/SharedVariable.java index 681ddd9b6..bde481464 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/SharedVariable.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/SharedVariable.java @@ -1,16 +1,16 @@ package io.codelaser.maddi.modification.link.impl.localvar; -import io.codelaser.maddi.modification.link.impl.LinkVariable; -import io.codelaser.maddi.cst.api.runtime.Runtime; -import io.codelaser.maddi.cst.api.type.ParameterizedType; -import io.codelaser.maddi.cst.api.variable.Variable; -import io.codelaser.maddi.cst.impl.variable.LocalVariableImpl; - import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import io.codelaser.maddi.cst.api.runtime.Runtime; +import io.codelaser.maddi.cst.api.type.ParameterizedType; +import io.codelaser.maddi.cst.api.variable.Variable; +import io.codelaser.maddi.cst.impl.variable.LocalVariableImpl; +import io.codelaser.maddi.modification.link.impl.LinkVariable; + public class SharedVariable extends LocalVariableImpl implements LinkVariable { public static final String PREFIX = "$__sv_"; diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/translate/TranslateConstants.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/translate/TranslateConstants.java index 39407e980..8011498d8 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/translate/TranslateConstants.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/translate/TranslateConstants.java @@ -1,13 +1,13 @@ package io.codelaser.maddi.modification.link.impl.translate; +import java.util.HashMap; +import java.util.Map; + import io.codelaser.maddi.cst.api.expression.Expression; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.api.translate.TranslationMap; import io.codelaser.maddi.cst.api.variable.Variable; -import java.util.HashMap; -import java.util.Map; - public class TranslateConstants implements TranslationMap { private final Runtime runtime; private final Map map = new HashMap<>(); diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/translate/VariableTranslationAllowHierarchy.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/translate/VariableTranslationAllowHierarchy.java index e7fb800a6..7e5e0f847 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/translate/VariableTranslationAllowHierarchy.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/translate/VariableTranslationAllowHierarchy.java @@ -1,5 +1,8 @@ package io.codelaser.maddi.modification.link.impl.translate; +import java.util.HashMap; +import java.util.Map; + import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.runtime.Runtime; @@ -7,9 +10,6 @@ import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.Variable; -import java.util.HashMap; -import java.util.Map; - /* see e.g. TestStaticValuesRecord,7, interface inbetween diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/translate/VariableTranslationMap.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/translate/VariableTranslationMap.java index c8f2c59af..9195a7936 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/translate/VariableTranslationMap.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/translate/VariableTranslationMap.java @@ -1,7 +1,9 @@ package io.codelaser.maddi.modification.link.impl.translate; -import io.codelaser.maddi.modification.link.impl.SliceFactory; -import io.codelaser.maddi.modification.prepwork.Util; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + import io.codelaser.maddi.cst.api.expression.Expression; import io.codelaser.maddi.cst.api.expression.IntConstant; import io.codelaser.maddi.cst.api.expression.VariableExpression; @@ -11,10 +13,8 @@ import io.codelaser.maddi.cst.api.translate.TranslationMap; import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.*; - -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; +import io.codelaser.maddi.modification.link.impl.SliceFactory; +import io.codelaser.maddi.modification.prepwork.Util; public class VariableTranslationMap implements TranslationMap { private final Runtime runtime; diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/translate/VirtualFieldTranslationMapForMethodParameters.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/translate/VirtualFieldTranslationMapForMethodParameters.java index e6bf2c313..c09bc0d2f 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/translate/VirtualFieldTranslationMapForMethodParameters.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/translate/VirtualFieldTranslationMapForMethodParameters.java @@ -1,9 +1,7 @@ package io.codelaser.maddi.modification.link.impl.translate; -import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; -import io.codelaser.maddi.modification.link.vf.VirtualFieldTranslationMapImpl; -import io.codelaser.maddi.modification.link.vf.VirtualFields; -import io.codelaser.maddi.modification.prepwork.variable.VirtualFieldTranslationMap; +import java.util.Map; + import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeParameter; @@ -14,8 +12,10 @@ import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.inspection.api.parser.GenericsHelper; import io.codelaser.maddi.inspection.impl.parser.GenericsHelperImpl; - -import java.util.Map; +import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; +import io.codelaser.maddi.modification.link.vf.VirtualFieldTranslationMapImpl; +import io.codelaser.maddi.modification.link.vf.VirtualFields; +import io.codelaser.maddi.modification.prepwork.variable.VirtualFieldTranslationMap; public class VirtualFieldTranslationMapForMethodParameters { private final VirtualFieldComputer virtualFieldComputer; diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/io/LinkCodec.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/io/LinkCodec.java index d3ca0f46c..09f943a62 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/io/LinkCodec.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/io/LinkCodec.java @@ -1,17 +1,17 @@ package io.codelaser.maddi.modification.link.io; -import io.codelaser.maddi.modification.link.impl.LinkedVariablesImpl; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.link.impl.Result; -import io.codelaser.maddi.modification.link.impl.localvar.AppliedFunctionalInterfaceVariable; -import io.codelaser.maddi.modification.link.impl.localvar.FunctionalInterfaceVariable; -import io.codelaser.maddi.modification.link.impl.localvar.MarkerVariable; -import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; -import io.codelaser.maddi.modification.prepwork.Util; -import io.codelaser.maddi.modification.prepwork.variable.Links; -import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; -import io.codelaser.maddi.modification.prepwork.variable.impl.ReturnVariableImpl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.PART_OF_CONSTRUCTION; + +import java.util.*; +import java.util.function.BiFunction; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.jetbrains.annotations.NotNull; +import org.parsers.json.Node; +import org.parsers.json.ast.StringLiteral; + import io.codelaser.maddi.cst.api.analysis.Codec; import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.Value; @@ -27,17 +27,18 @@ import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.cst.io.CodecImpl; import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import org.jetbrains.annotations.NotNull; -import org.parsers.json.Node; -import org.parsers.json.ast.StringLiteral; - -import java.util.*; -import java.util.function.BiFunction; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.PART_OF_CONSTRUCTION; +import io.codelaser.maddi.modification.link.impl.LinkedVariablesImpl; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.link.impl.Result; +import io.codelaser.maddi.modification.link.impl.localvar.AppliedFunctionalInterfaceVariable; +import io.codelaser.maddi.modification.link.impl.localvar.FunctionalInterfaceVariable; +import io.codelaser.maddi.modification.link.impl.localvar.MarkerVariable; +import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; +import io.codelaser.maddi.modification.prepwork.Util; +import io.codelaser.maddi.modification.prepwork.variable.Links; +import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; +import io.codelaser.maddi.modification.prepwork.variable.impl.ReturnVariableImpl; public class LinkCodec { diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/vf/VirtualFieldComputer.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/vf/VirtualFieldComputer.java index 813eeed1f..0f05d604f 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/vf/VirtualFieldComputer.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/vf/VirtualFieldComputer.java @@ -1,11 +1,15 @@ package io.codelaser.maddi.modification.link.vf; -import io.codelaser.maddi.modification.common.FunctionTypes; +import static io.codelaser.maddi.modification.link.vf.VirtualFields.NONE; + +import java.util.*; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; -import io.codelaser.maddi.modification.common.AnalysisHelper; -import io.codelaser.maddi.modification.link.impl.translate.VariableTranslationMap; -import io.codelaser.maddi.modification.prepwork.Util; -import io.codelaser.maddi.modification.prepwork.variable.VirtualFieldTranslationMap; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -22,15 +26,11 @@ import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.inspection.api.parser.GenericsHelper; import io.codelaser.maddi.inspection.impl.parser.GenericsHelperImpl; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.*; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static io.codelaser.maddi.modification.link.vf.VirtualFields.NONE; +import io.codelaser.maddi.modification.common.AnalysisHelper; +import io.codelaser.maddi.modification.common.FunctionTypes; +import io.codelaser.maddi.modification.link.impl.translate.VariableTranslationMap; +import io.codelaser.maddi.modification.prepwork.Util; +import io.codelaser.maddi.modification.prepwork.variable.VirtualFieldTranslationMap; /* Given an interface, or a class in the JDK for which we do not want to parse the sources (shallow analysis), diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/vf/VirtualFieldTranslationMapImpl.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/vf/VirtualFieldTranslationMapImpl.java index 0368240cb..0b24ebb32 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/vf/VirtualFieldTranslationMapImpl.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/vf/VirtualFieldTranslationMapImpl.java @@ -1,12 +1,14 @@ package io.codelaser.maddi.modification.link.vf; -import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; -import io.codelaser.maddi.modification.link.impl.translate.VariableTranslationMap; -import io.codelaser.maddi.modification.prepwork.Util; -import io.codelaser.maddi.modification.prepwork.variable.Link; -import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; -import io.codelaser.maddi.modification.prepwork.variable.VirtualFieldTranslationMap; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; +import static io.codelaser.maddi.modification.link.vf.VirtualFieldComputer.VF_CHAR; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; + import io.codelaser.maddi.cst.api.expression.Expression; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; @@ -17,15 +19,13 @@ import io.codelaser.maddi.cst.api.type.Wildcard; import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.Variable; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static io.codelaser.maddi.modification.link.vf.VirtualFieldComputer.VF_CHAR; +import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; +import io.codelaser.maddi.modification.link.impl.translate.VariableTranslationMap; +import io.codelaser.maddi.modification.prepwork.Util; +import io.codelaser.maddi.modification.prepwork.variable.Link; +import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; +import io.codelaser.maddi.modification.prepwork.variable.VirtualFieldTranslationMap; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; // uses VariableTranslationMap.translateVariableRecursively() public class VirtualFieldTranslationMapImpl implements VirtualFieldTranslationMap { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/CommonTest.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/CommonTest.java index 70e0c9a4f..85e3f29c3 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/CommonTest.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/CommonTest.java @@ -1,27 +1,28 @@ package io.codelaser.maddi.modification.link; +import static io.codelaser.maddi.inspection.resource.SourceSetImpl.testProtocolSourceSet; +import static io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults.ANALYZED_RESULTS; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.slf4j.LoggerFactory; + import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import static io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults.ANALYZED_RESULTS; -import static io.codelaser.maddi.inspection.resource.SourceSetImpl.testProtocolSourceSet; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; public abstract class CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestAdapterChainGrowth.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestAdapterChainGrowth.java index 20c6eb6f6..f82019c03 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestAdapterChainGrowth.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestAdapterChainGrowth.java @@ -17,18 +17,19 @@ package io.codelaser.maddi.modification.link.impl; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; /** * Eclipse Collections' {@code CollectionAdapter.wrapList(Iterable)} (2026-09-26): a chain of {@code instanceof} diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestAlternativeSources.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestAlternativeSources.java index 9aaac7164..1c43bb440 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestAlternativeSources.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestAlternativeSources.java @@ -17,29 +17,30 @@ package io.codelaser.maddi.modification.link.impl; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.modification.prepwork.variable.impl.ObjectCreationVariableImpl; -import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import io.codelaser.maddi.modification.link.impl.linkgraph.Graph; import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.impl.linkgraph.Graph; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.TestInstance; - -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.modification.prepwork.variable.impl.ObjectCreationVariableImpl; /** * Alternatives are not aliases: a recipient assigned one of several values in one statement may hold either, but diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestAnonymousMemberRecordOpenJdk.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestAnonymousMemberRecordOpenJdk.java index 9aecd42da..bfc530a52 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestAnonymousMemberRecordOpenJdk.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestAnonymousMemberRecordOpenJdk.java @@ -1,15 +1,16 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.cst.api.expression.ConstructorCall; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.ReturnStatement; +import static org.junit.jupiter.api.Assertions.assertNotNull; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import io.codelaser.maddi.cst.api.expression.ConstructorCall; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.ReturnStatement; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; /** * Task #33, OPENJDK front (this module's CommonTest uses the openjdk inspector): the elasticsearch diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestAppliedFunctionalInterface.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestAppliedFunctionalInterface.java index cbe9abded..c347b11a5 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestAppliedFunctionalInterface.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestAppliedFunctionalInterface.java @@ -1,17 +1,18 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; /** * Exercises {@link LinkAppliedFunctionalInterface}'s {@code searchAndExpand} path (and its {@code SearchResult}): diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestArrayInitializer.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestArrayInitializer.java index e80462ce7..df7be1825 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestArrayInitializer.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestArrayInitializer.java @@ -18,17 +18,18 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; public class TestArrayInitializer extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestBareBlockStatement.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestBareBlockStatement.java index cf40478b3..8419fada6 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestBareBlockStatement.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestBareBlockStatement.java @@ -17,6 +17,13 @@ package io.codelaser.maddi.modification.link.impl; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -30,12 +37,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; /** * Shadow clone bench try_pure_compiles getPluginImageURL (9 clones): a reflective call inside an if inside a try, diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestBoundTypeParameter.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestBoundTypeParameter.java index c9f57bae2..f3e00cb81 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestBoundTypeParameter.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestBoundTypeParameter.java @@ -1,5 +1,18 @@ package io.codelaser.maddi.modification.link.impl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; @@ -9,18 +22,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; // identical to TestList, but with bound type parameters public class TestBoundTypeParameter extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestBranchReadsEvaluationStage.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestBranchReadsEvaluationStage.java index 70178b667..2d02f0fe6 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestBranchReadsEvaluationStage.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestBranchReadsEvaluationStage.java @@ -17,15 +17,16 @@ package io.codelaser.maddi.modification.link.impl; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * Linking a method again, with nothing it reads changed, must give the same summary. The first statement of a diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestCallResultFieldOfReceiver.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestCallResultFieldOfReceiver.java index 8f51637e8..4877a8ccb 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestCallResultFieldOfReceiver.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestCallResultFieldOfReceiver.java @@ -16,19 +16,20 @@ */ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.LinkedHashMap; +import java.util.Map; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; -import java.util.LinkedHashMap; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; /** * A call result that is a field of the receiver, or of an object reachable from it ('getWrapper ≺ this.parent'), diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestCast.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestCast.java index 1596946e6..67ab35d3e 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestCast.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestCast.java @@ -1,5 +1,16 @@ package io.codelaser.maddi.modification.link.impl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; @@ -7,16 +18,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.Statement; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.*; public class TestCast extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestChainedReassignment.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestChainedReassignment.java index 3c6df5d9d..31c568784 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestChainedReassignment.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestChainedReassignment.java @@ -1,18 +1,19 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.util.HashMap; +import java.util.Map; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; -import java.util.HashMap; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertNotNull; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; /** * Repro for the timefold-solver crash "X and Y should already have been removed; they're in the same equivalence diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestConcurrentMethodCallWrite.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestConcurrentMethodCallWrite.java index dc5eeaa7a..eaad961e7 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestConcurrentMethodCallWrite.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestConcurrentMethodCallWrite.java @@ -17,13 +17,7 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.ArrayList; import java.util.List; @@ -32,7 +26,14 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; /** * Two worker threads may compute the links of the same method at the same time: RecursionPrevention's in-progress diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestDependent.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestDependent.java index ebcc1da50..bd1e3df51 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestDependent.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestDependent.java @@ -1,5 +1,14 @@ package io.codelaser.maddi.modification.link.impl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; @@ -7,14 +16,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.*; public class TestDependent extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestForkJoinNestedAlternatives.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestForkJoinNestedAlternatives.java index e8dada33b..83051701a 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestForkJoinNestedAlternatives.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestForkJoinNestedAlternatives.java @@ -17,17 +17,18 @@ package io.codelaser.maddi.modification.link.impl; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertNotNull; /** * Clone bench {@code fors_pure_compiles/Function1972365_file1076824.shiftRight} (slowTest 2026-09-28, the first diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestGetSet.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestGetSet.java index f483aef89..ca986cf7a 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestGetSet.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestGetSet.java @@ -18,19 +18,20 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.cst.api.info.FieldInfo; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.info.FieldInfo; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; // complementary to TestStaticValuesGetSet public class TestGetSet extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestIgnoreModifications.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestIgnoreModifications.java index 7acea4ca1..bad00f983 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestIgnoreModifications.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestIgnoreModifications.java @@ -1,5 +1,14 @@ package io.codelaser.maddi.modification.link.impl; +import static org.junit.jupiter.api.Assertions.*; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.FieldInfo; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; @@ -7,14 +16,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.FieldInfo; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; public class TestIgnoreModifications extends CommonTest { @Language("java") diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestImmutable.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestImmutable.java index 05c65eb57..e5c1465ff 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestImmutable.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestImmutable.java @@ -1,18 +1,19 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; public class TestImmutable extends CommonTest { @Language("java") diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestInstanceOf.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestInstanceOf.java index 24b47144a..70bef8958 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestInstanceOf.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestInstanceOf.java @@ -1,5 +1,16 @@ package io.codelaser.maddi.modification.link.impl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; @@ -8,16 +19,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.Statement; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.*; public class TestInstanceOf extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestInstanceOfConditional.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestInstanceOfConditional.java index a375a2278..ab60b94b7 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestInstanceOfConditional.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestInstanceOfConditional.java @@ -1,13 +1,14 @@ package io.codelaser.maddi.modification.link.impl; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; /* A pattern variable bound in the condition of a conditional EXPRESSION links to the value it was bound from, as it diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLambdaWritesCapturedHolder.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLambdaWritesCapturedHolder.java index 1972dbc2e..79a2eed59 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLambdaWritesCapturedHolder.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLambdaWritesCapturedHolder.java @@ -1,13 +1,14 @@ package io.codelaser.maddi.modification.link.impl; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; /* A lambda that writes THROUGH a captured holder -- an array element, a field of a captured object -- has an effect diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinkMethodCall.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinkMethodCall.java index 3c5e4ccb9..2f5bd8de1 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinkMethodCall.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinkMethodCall.java @@ -1,18 +1,19 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.HashMap; +import java.util.Map; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; -import java.util.HashMap; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; /** * Specification-by-example for {@link LinkMethodCall}, the class that turns a callee's summary diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinkModificationArea.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinkModificationArea.java index 80b3b941a..c29676a44 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinkModificationArea.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinkModificationArea.java @@ -17,22 +17,23 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; -import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static org.junit.jupiter.api.Assertions.*; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.prepwork.variable.VariableData; +import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestLinkModificationArea extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinkTypeParameters.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinkTypeParameters.java index 35f911129..921602ee8 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinkTypeParameters.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinkTypeParameters.java @@ -17,20 +17,21 @@ package io.codelaser.maddi.modification.link.impl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.Statement; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.*; public class TestLinkTypeParameters extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinkUnpreppedCallee.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinkUnpreppedCallee.java index 0b86ced8e..36e9481a2 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinkUnpreppedCallee.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinkUnpreppedCallee.java @@ -1,20 +1,21 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.Map; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.inspection.api.parser.ParseResult; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.Map; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; /** * The link computer must never source-compute a method whose statements carry no prep data: doStatement's diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinksBuilderAddAllDistinct.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinksBuilderAddAllDistinct.java index 03197518f..1ee41812d 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinksBuilderAddAllDistinct.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinksBuilderAddAllDistinct.java @@ -17,20 +17,21 @@ package io.codelaser.maddi.modification.link.impl; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; +import java.util.stream.Collectors; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.prepwork.variable.Links; import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.stream.Collectors; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * {@code Links.Builder.addAllDistinct} merges a variable's links over the sub-blocks of one statement. Its diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinksLastWins.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinksLastWins.java index 27da27f16..36fcc83f7 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinksLastWins.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLinksLastWins.java @@ -17,6 +17,14 @@ package io.codelaser.maddi.modification.link.impl; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.variable.Variable; @@ -24,13 +32,6 @@ import io.codelaser.maddi.modification.prepwork.variable.Links; import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableInfoImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; /** * CodeLaser/maddi#15: {@code Links} equality is primary-only, and {@code VariableInfoImpl.setLinkedVariables} used it for change diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestList.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestList.java index 79f20b2e8..c874976f6 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestList.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestList.java @@ -1,5 +1,19 @@ package io.codelaser.maddi.modification.link.impl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; @@ -9,19 +23,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.*; public class TestList extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLocallyIndexedSummary.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLocallyIndexedSummary.java index f7596b8ec..19afba03a 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLocallyIndexedSummary.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLocallyIndexedSummary.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.HashMap; +import java.util.Map; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; -import java.util.HashMap; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; /** * An array element at a local index ({@code a[index++]}, {@code arr[i]}) in a method's summary: the caller cannot diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLoopFilledArray.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLoopFilledArray.java index 417913b7e..61bde04d1 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLoopFilledArray.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestLoopFilledArray.java @@ -16,19 +16,20 @@ */ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.HashMap; +import java.util.Map; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; -import java.util.HashMap; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; /** * Arrays filled in a loop and returned (CodeLaser/maddi-mod#79). The returned array shares its elements' content diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestMap.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestMap.java index 05519ba03..e7fcf75f6 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestMap.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestMap.java @@ -1,18 +1,19 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.variable.Variable; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.variable.Variable; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; public class TestMap extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestMapManual.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestMapManual.java index 59a3608e2..a94942389 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestMapManual.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestMapManual.java @@ -1,12 +1,18 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; -import io.codelaser.maddi.modification.prepwork.variable.impl.ReturnVariableImpl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.VariableExpression; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -15,18 +21,13 @@ import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.DependentVariable; import io.codelaser.maddi.cst.api.variable.FieldReference; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.atomic.AtomicBoolean; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; +import io.codelaser.maddi.modification.prepwork.variable.impl.ReturnVariableImpl; public class TestMapManual extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestMarkDegradedRace.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestMarkDegradedRace.java index c102c6922..8b2fd031c 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestMarkDegradedRace.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestMarkDegradedRace.java @@ -1,18 +1,19 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.List; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.atomic.AtomicReference; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.modification.link.CommonTest; public class TestMarkDegradedRace extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestMediatedLinks.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestMediatedLinks.java index e7c59f669..69a638bed 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestMediatedLinks.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestMediatedLinks.java @@ -1,25 +1,24 @@ package io.codelaser.maddi.modification.link.impl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.variable.Link; import io.codelaser.maddi.modification.prepwork.variable.VariableData; -import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.stream.Stream; -import java.util.stream.StreamSupport; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.*; /** * Task #39 step 1 (mediation provenance): the pattern-binding link 'o → ii' is produced MEDIATED diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestReassignedLocalFaces.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestReassignedLocalFaces.java index 17165e748..4d4f0de95 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestReassignedLocalFaces.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestReassignedLocalFaces.java @@ -16,19 +16,20 @@ */ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.HashMap; +import java.util.Map; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; -import java.util.HashMap; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; /** * A reassigned local keeps none of its old object's faces, and the cases of an old-style switch are alternatives diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestReassignedSource.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestReassignedSource.java index 6ac7fe09f..533be39c5 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestReassignedSource.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestReassignedSource.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.HashMap; +import java.util.Map; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; -import java.util.HashMap; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; /** * A source of an assignment group that is assigned a new value afterwards: {@code x = h.next; h.next = y}, diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestRecord.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestRecord.java index 2356d0bea..e3d91e812 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestRecord.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestRecord.java @@ -1,5 +1,14 @@ package io.codelaser.maddi.modification.link.impl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; @@ -7,14 +16,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; public class TestRecord extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestRedundantModificationLinks.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestRedundantModificationLinks.java index 401740d61..236471ac9 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestRedundantModificationLinks.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestRedundantModificationLinks.java @@ -1,5 +1,14 @@ package io.codelaser.maddi.modification.link.impl; +import static org.junit.jupiter.api.Assertions.*; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; @@ -7,14 +16,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; public class TestRedundantModificationLinks extends CommonTest { @Language("java") diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestRemoveChainWork.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestRemoveChainWork.java index 723839067..13dccd8fd 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestRemoveChainWork.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestRemoveChainWork.java @@ -17,6 +17,14 @@ package io.codelaser.maddi.modification.link.impl; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.variable.FieldReference; @@ -24,13 +32,6 @@ import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; /** * Eclipse Collections' {@code UnifiedSet.remove(Object)} family (2026-09-27): an {@code instanceof} if-chain with diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestSelfReferentialReassignment.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestSelfReferentialReassignment.java index 296947e92..c4544620d 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestSelfReferentialReassignment.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestSelfReferentialReassignment.java @@ -14,19 +14,20 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.HashMap; +import java.util.Map; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; -import java.util.HashMap; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; /** * A local reassigned from its own face, {@code n = n.next} or {@code node = node.map.get(s)}, and a local reassigned diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestShallow.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestShallow.java index ef1ebca97..c7803960e 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestShallow.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestShallow.java @@ -1,14 +1,20 @@ package io.codelaser.maddi.modification.link.impl; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_METHOD; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_PARAMETER; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.INDEPENDENT_HC; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.*; +import java.util.stream.Stream; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.aapi.parser.AnalysisHintsParser; -import io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; -import io.codelaser.maddi.modification.link.vf.VirtualFields; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.Link; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -17,19 +23,14 @@ import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.*; -import java.util.stream.Stream; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_METHOD; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_PARAMETER; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.INDEPENDENT_HC; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; +import io.codelaser.maddi.modification.link.vf.VirtualFields; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.Link; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; public class TestShallow extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestShallowFunctional.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestShallowFunctional.java index d945fd051..692bef8eb 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestShallowFunctional.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestShallowFunctional.java @@ -1,28 +1,25 @@ package io.codelaser.maddi.modification.link.impl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; +import java.util.function.BiFunction; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.element.Element; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.element.Element; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.variable.Variable; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.function.BiFunction; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_PARAMETER; -import static org.junit.jupiter.api.Assertions.assertEquals; public class TestShallowFunctional extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestStream.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestStream.java index c9e57c599..4392cd51e 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestStream.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestStream.java @@ -1,5 +1,16 @@ package io.codelaser.maddi.modification.link.impl; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; +import java.util.stream.Stream; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; @@ -7,16 +18,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.stream.Stream; - -import static org.junit.jupiter.api.Assertions.assertEquals; public class TestStream extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestSummaryFieldCycle.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestSummaryFieldCycle.java index 3f2b87219..9da9889e7 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestSummaryFieldCycle.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestSummaryFieldCycle.java @@ -15,6 +15,17 @@ * limitations under the License. */ package io.codelaser.maddi.modification.link.impl; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Stream; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.variable.Variable; @@ -23,16 +34,6 @@ import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.variable.Links; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Stream; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; /** * Jenkins' ANTLR-generated LabelExpressionParser, reduced: two rule methods whose contexts point at each other diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestSummaryObjectCreationFaces.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestSummaryObjectCreationFaces.java index 12427ac72..92eaa2482 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestSummaryObjectCreationFaces.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestSummaryObjectCreationFaces.java @@ -17,19 +17,19 @@ package io.codelaser.maddi.modification.link.impl; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; - import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; /** * CodeLaser/maddi#91: a method's summary must not carry the deep FACES of the objects it creates ('fillAfter.keys.§m ≡ oc:15-31.§m', diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestSwitchExpression.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestSwitchExpression.java index 449e037bc..211d51e62 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestSwitchExpression.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestSwitchExpression.java @@ -1,16 +1,17 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; public class TestSwitchExpression extends CommonTest { @Language("java") diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestSystemArrayCopy.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestSystemArrayCopy.java index 75a20ca9c..a1b0454fd 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestSystemArrayCopy.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestSystemArrayCopy.java @@ -18,6 +18,19 @@ package io.codelaser.maddi.modification.link.impl; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_PARAMETER; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; @@ -25,18 +38,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_PARAMETER; -import static org.junit.jupiter.api.Assertions.assertEquals; public class TestSystemArrayCopy extends CommonTest { @Language("java") diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestVariableTranslationAllowHierarchy.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestVariableTranslationAllowHierarchy.java index 2d69872e7..f5e034a65 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestVariableTranslationAllowHierarchy.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestVariableTranslationAllowHierarchy.java @@ -1,19 +1,20 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.impl.translate.VariableTranslationAllowHierarchy; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertSame; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.VariableExpression; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.LocalVariable; import io.codelaser.maddi.cst.api.variable.Variable; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertSame; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.impl.translate.VariableTranslationAllowHierarchy; /** * Unit test for {@link VariableTranslationAllowHierarchy}: a {@code TranslationMap} that, on a miss for a field diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestVariablesLinkedToObject.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestVariablesLinkedToObject.java index e98a21b02..5512b8f66 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestVariablesLinkedToObject.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestVariablesLinkedToObject.java @@ -1,5 +1,17 @@ package io.codelaser.maddi.modification.link.impl; +import static io.codelaser.maddi.modification.link.impl.LinkComputerImpl.VARIABLES_LINKED_TO_OBJECT; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.expression.MethodCall; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; @@ -7,17 +19,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.expression.MethodCall; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.LinkComputerImpl.VARIABLES_LINKED_TO_OBJECT; -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; public class TestVariablesLinkedToObject extends CommonTest { @Language("java") diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestVl2oAliases.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestVl2oAliases.java index 23d7aafb7..d03fa9f05 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestVl2oAliases.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestVl2oAliases.java @@ -1,20 +1,21 @@ package io.codelaser.maddi.modification.link.impl; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.cst.api.expression.MethodCall; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import static io.codelaser.maddi.modification.link.impl.LinkComputerImpl.VARIABLES_LINKED_TO_OBJECT; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static io.codelaser.maddi.modification.link.impl.LinkComputerImpl.VARIABLES_LINKED_TO_OBJECT; -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.expression.MethodCall; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; /** * Task #38 (extract-interface adequacy review, 2026-07-18): the ≡ exclusion in addVL2O is deliberate diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/basics/TestLinkNature.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/basics/TestLinkNature.java index 3d552634a..1bcfabe6f 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/basics/TestLinkNature.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/basics/TestLinkNature.java @@ -1,9 +1,7 @@ package io.codelaser.maddi.modification.link.impl.basics; -import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; -import io.codelaser.maddi.modification.prepwork.variable.LinkNature; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import static io.codelaser.maddi.modification.link.impl.LinkNatureImpl.*; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.io.File; import java.io.FileOutputStream; @@ -14,8 +12,11 @@ import java.util.Collections; import java.util.List; -import static io.codelaser.maddi.modification.link.impl.LinkNatureImpl.*; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; +import io.codelaser.maddi.modification.prepwork.variable.LinkNature; public class TestLinkNature { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/basics/TestSimpleSharedVariable.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/basics/TestSimpleSharedVariable.java index ed56d1904..5ce1973be 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/basics/TestSimpleSharedVariable.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/basics/TestSimpleSharedVariable.java @@ -1,25 +1,25 @@ package io.codelaser.maddi.modification.link.impl.basics; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; -import io.codelaser.maddi.modification.link.impl.linkgraph.Graph; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; public class TestSimpleSharedVariable extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/basics/TestStringBuilder.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/basics/TestStringBuilder.java index efd5d01b2..29b5f62de 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/basics/TestStringBuilder.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/basics/TestStringBuilder.java @@ -1,21 +1,22 @@ package io.codelaser.maddi.modification.link.impl.basics; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; -import io.codelaser.maddi.modification.prepwork.variable.Links; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.Links; import io.codelaser.maddi.modification.prepwork.variable.Stage; import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.Statement; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; public class TestStringBuilder extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/basics/TestSubBlocks.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/basics/TestSubBlocks.java index 20f9a5c9b..1bb8b78e0 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/basics/TestSubBlocks.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/basics/TestSubBlocks.java @@ -1,5 +1,14 @@ package io.codelaser.maddi.modification.link.impl.basics; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; @@ -8,14 +17,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; public class TestSubBlocks extends CommonTest { @Language("java") diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/basics/TestVarargs.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/basics/TestVarargs.java index 4126b2b42..4d483fa01 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/basics/TestVarargs.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/basics/TestVarargs.java @@ -18,6 +18,16 @@ package io.codelaser.maddi.modification.link.impl.basics; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; @@ -27,15 +37,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; public class TestVarargs extends CommonTest { @Language("java") diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestClosureWitnessIndex.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestClosureWitnessIndex.java index 9b69a2f5b..ef3f86a50 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestClosureWitnessIndex.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestClosureWitnessIndex.java @@ -1,10 +1,11 @@ package io.codelaser.maddi.modification.link.impl.graph; -import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; -import io.codelaser.maddi.modification.prepwork.variable.LinkNature; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; +import io.codelaser.maddi.modification.prepwork.variable.LinkNature; public class TestClosureWitnessIndex { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestDegradedAnalysisException.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestDegradedAnalysisException.java index 546e108c4..f6e570272 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestDegradedAnalysisException.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestDegradedAnalysisException.java @@ -1,10 +1,10 @@ package io.codelaser.maddi.modification.link.impl.graph; +import static org.junit.jupiter.api.Assertions.*; + import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; - /* The two guards that abandon a method used to throw the SAME UnsupportedOperationException("cycle protection"), so a corpus degrading in bulk could not be attributed to either: on elasticsearch, 111 degraded methods and no diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestEngine.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestEngine.java index 9f33b4ef5..1227c37ff 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestEngine.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestEngine.java @@ -1,16 +1,17 @@ package io.codelaser.maddi.modification.link.impl.graph; -import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; -import io.codelaser.maddi.modification.prepwork.variable.LinkNature; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.Set; - import static io.codelaser.maddi.modification.link.impl.LinkNatureImpl.IS_ELEMENT_OF; import static io.codelaser.maddi.modification.link.impl.LinkNatureImpl.SHARES_ELEMENTS; import static org.junit.jupiter.api.Assertions.assertEquals; +import java.util.Set; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; +import io.codelaser.maddi.modification.prepwork.variable.LinkNature; + public class TestEngine { LinkNature IS_IDENTICAL_TO = LinkNatureImpl.makeIdenticalTo(null); diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestEngineDeterminism.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestEngineDeterminism.java index d50f8e80d..e5c21e67e 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestEngineDeterminism.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestEngineDeterminism.java @@ -1,9 +1,7 @@ package io.codelaser.maddi.modification.link.impl.graph; -import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; -import io.codelaser.maddi.modification.prepwork.variable.LinkNature; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static io.codelaser.maddi.modification.link.impl.LinkNatureImpl.*; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.ArrayList; import java.util.Collections; @@ -11,8 +9,11 @@ import java.util.Set; import java.util.TreeSet; -import static io.codelaser.maddi.modification.link.impl.LinkNatureImpl.*; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; +import io.codelaser.maddi.modification.prepwork.variable.LinkNature; /* Determinism regression. The engine guarantees two properties, at different strengths: diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestLabeledGraph.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestLabeledGraph.java index 58562673e..a4b20203d 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestLabeledGraph.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestLabeledGraph.java @@ -1,14 +1,15 @@ package io.codelaser.maddi.modification.link.impl.graph; -import io.codelaser.maddi.modification.prepwork.variable.LinkNature; -import org.junit.jupiter.api.Test; +import static io.codelaser.maddi.modification.link.impl.LinkNatureImpl.*; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.StreamSupport; -import static io.codelaser.maddi.modification.link.impl.LinkNatureImpl.*; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.modification.prepwork.variable.LinkNature; public class TestLabeledGraph { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/Test1.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/Test1.java index 3f9308567..2c6a2fec9 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/Test1.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/Test1.java @@ -1,21 +1,22 @@ package io.codelaser.maddi.modification.link.impl.large; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertFalse; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.Lambda; import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertFalse; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; @Disabled("sv-integration: elaborate synthetic mock does not type-check under openjdk javac, and stresses WIP engine stability; re-enable after mock rewrite + engine completion") public class Test1 extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/Test2.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/Test2.java index 617111b79..96afe4f44 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/Test2.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/Test2.java @@ -1,14 +1,15 @@ package io.codelaser.maddi.modification.link.impl.large; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; @Disabled("sv-integration: elaborate synthetic mock does not type-check under openjdk javac, and stresses WIP engine stability; re-enable after mock rewrite + engine completion") public class Test2 extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/Test3.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/Test3.java index 5279c48cf..213c1df29 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/Test3.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/Test3.java @@ -1,14 +1,15 @@ package io.codelaser.maddi.modification.link.impl.large; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; @Disabled("sv-integration: elaborate synthetic mock does not type-check under openjdk javac, and stresses WIP engine stability; re-enable after mock rewrite + engine completion") public class Test3 extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/TestBuilderChainBench.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/TestBuilderChainBench.java index 17ad7f6b6..2b035b5f3 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/TestBuilderChainBench.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/TestBuilderChainBench.java @@ -1,13 +1,14 @@ package io.codelaser.maddi.modification.link.impl.large; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; import io.codelaser.maddi.modification.link.impl.localvar.SharedVariable; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertTrue; /** * The shape that makes the linker unusable on Elasticsearch (toolkit task #22): ONE long straight-line method diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/TestDeepStructureBench.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/TestDeepStructureBench.java index c25fefd2c..892e35b5b 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/TestDeepStructureBench.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/TestDeepStructureBench.java @@ -1,11 +1,12 @@ package io.codelaser.maddi.modification.link.impl.large; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; /* A self-contained distillation of the io.codelaser...parseq linking pathology (deep recursive generic diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/TestLinkGraph.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/TestLinkGraph.java index 8cf2e981e..aa18f7acc 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/TestLinkGraph.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/TestLinkGraph.java @@ -1,14 +1,15 @@ package io.codelaser.maddi.modification.link.impl.large; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; @Disabled("sv-integration: elaborate synthetic mock does not type-check under openjdk javac, and stresses WIP engine stability; re-enable after mock rewrite + engine completion") public class TestLinkGraph extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/TestSaturatedClosureBench.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/TestSaturatedClosureBench.java index c9be1bd94..76f164bba 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/TestSaturatedClosureBench.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/large/TestSaturatedClosureBench.java @@ -1,13 +1,14 @@ package io.codelaser.maddi.modification.link.impl.large; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertTrue; + import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; /** * Toolkit task #31: what the link engine's per-method work ceiling is actually spent on. diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/staticvalues/TestSharedVariable.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/staticvalues/TestSharedVariable.java index 0af3a8fc7..8ab89b8c4 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/staticvalues/TestSharedVariable.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/staticvalues/TestSharedVariable.java @@ -1,18 +1,19 @@ package io.codelaser.maddi.modification.link.impl.staticvalues; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; /* This test is created to show the need for grouping shared variables. diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/translate/TestVariableTranslationMap.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/translate/TestVariableTranslationMap.java index 60b9fefeb..00ec5994e 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/translate/TestVariableTranslationMap.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/translate/TestVariableTranslationMap.java @@ -1,9 +1,15 @@ package io.codelaser.maddi.modification.link.impl.translate; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.impl.translate.VariableTranslationMap; -import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; -import io.codelaser.maddi.modification.link.vf.VirtualFields; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; @@ -12,15 +18,9 @@ import io.codelaser.maddi.cst.api.variable.LocalVariable; import io.codelaser.maddi.cst.api.variable.This; import io.codelaser.maddi.cst.api.variable.Variable; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; +import io.codelaser.maddi.modification.link.vf.VirtualFields; public class TestVariableTranslationMap extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/translate/TestVirtualFieldTranslationMapForMethodParameters.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/translate/TestVirtualFieldTranslationMapForMethodParameters.java index afc1b846a..1a853e55e 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/translate/TestVirtualFieldTranslationMapForMethodParameters.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/translate/TestVirtualFieldTranslationMapForMethodParameters.java @@ -1,21 +1,22 @@ package io.codelaser.maddi.modification.link.impl.translate; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; -import io.codelaser.maddi.modification.prepwork.variable.VirtualFieldTranslationMap; -import io.codelaser.maddi.cst.api.expression.MethodCall; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.info.TypeParameter; -import io.codelaser.maddi.cst.api.type.ParameterizedType; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.expression.MethodCall; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.info.TypeParameter; +import io.codelaser.maddi.cst.api.type.ParameterizedType; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; +import io.codelaser.maddi.modification.prepwork.variable.VirtualFieldTranslationMap; public class TestVirtualFieldTranslationMapForMethodParameters extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkCollectionMutators.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkCollectionMutators.java index bb1fb2806..1c0d19dde 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkCollectionMutators.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkCollectionMutators.java @@ -17,17 +17,9 @@ package io.codelaser.maddi.modification.link.io; -import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.type.ParameterizedType; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import io.codelaser.maddi.modification.common.CommonTest; -import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; +import static io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults.ANALYZED_RESULTS_JDK; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.IOException; import java.lang.reflect.InvocationTargetException; @@ -68,9 +60,18 @@ import java.util.WeakHashMap; import java.util.function.Supplier; -import static io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults.ANALYZED_RESULTS_JDK; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.element.SourceSet; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.type.ParameterizedType; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.codelaser.maddi.modification.common.CommonTest; +import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; /** * The JDK hints' modifying methods of the collection interfaces, against a yardstick the JDK itself provides: an diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkCollectionViews.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkCollectionViews.java index 183203eca..167b7e9c6 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkCollectionViews.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkCollectionViews.java @@ -17,6 +17,21 @@ package io.codelaser.maddi.modification.link.io; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_METHOD; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_PARAMETER; +import static io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults.ANALYZED_RESULTS_JDK; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Executable; +import java.lang.reflect.Method; +import java.util.*; +import java.util.function.Function; +import java.util.function.Supplier; + +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -28,21 +43,6 @@ import io.codelaser.maddi.inspection.resource.SourceSetImpl; import io.codelaser.maddi.modification.common.CommonTest; import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.lang.reflect.Constructor; -import java.lang.reflect.Executable; -import java.lang.reflect.Method; -import java.util.*; -import java.util.function.Function; -import java.util.function.Supplier; - -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_METHOD; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_PARAMETER; -import static io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults.ANALYZED_RESULTS_JDK; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; /** * The JDK hints' independence of the {@code java.util} methods that return a view or a copy, against what the JDK diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkReadOnlyTypes.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkReadOnlyTypes.java index 8f70c0936..0a4fe0e32 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkReadOnlyTypes.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkReadOnlyTypes.java @@ -17,19 +17,10 @@ package io.codelaser.maddi.modification.link.io; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.type.ParameterizedType; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import io.codelaser.maddi.modification.common.CommonTest; -import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE; +import static io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults.ANALYZED_RESULTS_JDK; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.IOException; import java.lang.annotation.Annotation; @@ -62,10 +53,20 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE; -import static io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults.ANALYZED_RESULTS_JDK; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.element.SourceSet; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.type.ParameterizedType; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.codelaser.maddi.modification.common.CommonTest; +import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; /** * The JDK hints of two families of types the JDK itself marks as unchangeable, the step after diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestLoadAnalyzedPackageFiles.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestLoadAnalyzedPackageFiles.java index 221fae07d..11aeb6434 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestLoadAnalyzedPackageFiles.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestLoadAnalyzedPackageFiles.java @@ -17,31 +17,32 @@ package io.codelaser.maddi.modification.link.io; -import ch.qos.logback.classic.Level; -import io.codelaser.maddi.modification.common.CommonTest; -import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; -import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.List; -import java.util.stream.Collectors; - -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.NullabilityImpl.UNSPECIFIED; -import static io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults.ANALYZED_RESULTS; import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.IMMUTABLE; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.MUTABLE; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.INDEPENDENT; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.NullabilityImpl.UNSPECIFIED; +import static io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults.ANALYZED_RESULTS; import static org.junit.jupiter.api.Assertions.*; +import java.io.IOException; +import java.util.List; +import java.util.stream.Collectors; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.slf4j.LoggerFactory; + +import ch.qos.logback.classic.Level; +import io.codelaser.maddi.cst.api.element.SourceSet; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.codelaser.maddi.modification.common.CommonTest; +import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; + public class TestLoadAnalyzedPackageFiles { @BeforeAll diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestWriteAnalysis.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestWriteAnalysis.java index 77dae3c3b..b09e63e0c 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestWriteAnalysis.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestWriteAnalysis.java @@ -17,7 +17,17 @@ package io.codelaser.maddi.modification.link.io; -import io.codelaser.maddi.modification.prepwork.io.WriteAnalysisResults; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.codelaser.maddi.cst.api.element.CompilationUnit; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -25,17 +35,8 @@ import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.cst.impl.runtime.RuntimeImpl; +import io.codelaser.maddi.modification.prepwork.io.WriteAnalysisResults; import io.codelaser.maddi.util.Trie; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; - -import static org.junit.jupiter.api.Assertions.assertEquals; public class TestWriteAnalysis { private static final Logger LOGGER = LoggerFactory.getLogger(TestWriteAnalysis.class); diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestWriteAnalysis2.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestWriteAnalysis2.java index 0b01f0a3b..67c600749 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestWriteAnalysis2.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestWriteAnalysis2.java @@ -17,6 +17,27 @@ package io.codelaser.maddi.modification.link.io; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.cst.api.analysis.Codec; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.variable.DependentVariable; +import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; @@ -27,27 +48,7 @@ import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; import io.codelaser.maddi.modification.prepwork.io.WriteAnalysisResults; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.cst.api.analysis.Codec; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.variable.DependentVariable; -import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.util.Trie; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; public class TestWriteAnalysis2 extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestWriteAnalysisAssigned.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestWriteAnalysisAssigned.java index 7e4e3b945..bf4409234 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestWriteAnalysisAssigned.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestWriteAnalysisAssigned.java @@ -17,30 +17,31 @@ package io.codelaser.maddi.modification.link.io; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.util.List; +import java.util.Set; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Codec; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.variable.Variable; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; import io.codelaser.maddi.modification.prepwork.io.WriteAnalysisResults; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; import io.codelaser.maddi.util.Trie; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.util.List; -import java.util.Set; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.*; /** * The 'assigned' own-field set survives the write/read round-trip. The wire format appends an diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestWriteAnalysisMediated.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestWriteAnalysisMediated.java index 339f97a3f..7b4f7d65a 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestWriteAnalysisMediated.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestWriteAnalysisMediated.java @@ -17,32 +17,33 @@ package io.codelaser.maddi.modification.link.io; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.variable.Link; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.util.List; +import java.util.Set; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Codec; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.variable.Variable; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; import io.codelaser.maddi.modification.prepwork.io.WriteAnalysisResults; +import io.codelaser.maddi.modification.prepwork.variable.Link; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; import io.codelaser.maddi.util.Trie; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.util.List; -import java.util.Set; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.*; /** * Task #39 (c): mediation provenance survives the write/read round-trip. The wire format appends an diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestWriteAnalysisPassNature.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestWriteAnalysisPassNature.java index 9e46ff228..d570eba3d 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestWriteAnalysisPassNature.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestWriteAnalysisPassNature.java @@ -17,32 +17,33 @@ package io.codelaser.maddi.modification.link.io; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.variable.Link; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.util.List; +import java.util.Set; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Codec; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.variable.Variable; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; import io.codelaser.maddi.modification.prepwork.io.WriteAnalysisResults; +import io.codelaser.maddi.modification.prepwork.variable.Link; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; import io.codelaser.maddi.util.Trie; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.util.List; -import java.util.Set; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.*; /** * Round-trip of the pass-carrying ≡ variant (☷): the nature encodes as [symbol, methodInfo...] and diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/CommonKotlinLinkTest.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/CommonKotlinLinkTest.java index 730894b16..04f5def30 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/CommonKotlinLinkTest.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/CommonKotlinLinkTest.java @@ -1,5 +1,18 @@ package io.codelaser.maddi.modification.link.kotlin; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.jupiter.api.BeforeAll; + import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -16,18 +29,6 @@ import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import org.junit.jupiter.api.BeforeAll; - -import java.io.IOException; -import java.io.UncheckedIOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static org.junit.jupiter.api.Assertions.assertEquals; /* Linking KOTLIN input, from inside the link module. Every fixture is a pair: a Kotlin class `k.X` and the Java class diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkCollections.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkCollections.java index ddae67521..3fb7b7c51 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkCollections.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkCollections.java @@ -1,11 +1,11 @@ package io.codelaser.maddi.modification.link.kotlin; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; - /* Collections and maps: Kotlin's `List`/`MutableList`/`Map` are the java.util types, so indexing, `for`, `m[k] = v` and a copy constructor must link as their Java spelling does. The kotlin stdlib calls link through the contracts in diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkConditionals.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkConditionals.java index 1b1a76c24..6b823da4d 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkConditionals.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkConditionals.java @@ -1,11 +1,11 @@ package io.codelaser.maddi.modification.link.kotlin; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; - /* Values that flow through a method: identity, if/when/elvis as values, reassignment, casts and smart casts, arrays and varargs. diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkDelegation.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkDelegation.java index f53a3c029..d02533036 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkDelegation.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkDelegation.java @@ -1,11 +1,11 @@ package io.codelaser.maddi.modification.link.kotlin; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; - /* Class delegation: kotlinc stores the delegate in `$$delegate_0` and synthesizes one forwarder per interface method. The forwarders link as the Java twin; the constructor does not assign the field (CodeLaser/maddi#90). diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkFields.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkFields.java index a041a8eae..159cdaa45 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkFields.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkFields.java @@ -1,11 +1,11 @@ package io.codelaser.maddi.modification.link.kotlin; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; - /* Fields and properties: a primary constructor storing its parameters, the accessors K2 synthesizes, reads and writes of a property inside the class (the backing field) and through another instance, and a collection field diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkFunctions.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkFunctions.java index 2c5fd7980..e4477130e 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkFunctions.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkFunctions.java @@ -1,11 +1,11 @@ package io.codelaser.maddi.modification.link.kotlin; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; - /* Function types and lambdas. A Kotlin function type is kotlin.jvm.functions.FunctionN: the Java twins that take a Function1 or a java.util.function type link exactly as Kotlin does (CodeLaser/maddi-mod#13). What Kotlin's diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkIsolation.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkIsolation.java index d5931b8ec..ff55d00bb 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkIsolation.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkIsolation.java @@ -1,10 +1,10 @@ package io.codelaser.maddi.modification.link.kotlin; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; - /* ⛔ CodeLaser/maddi#83: state from one parse leaks into the link results of a later, independent parse in the same JVM. Linking a static call (`listOf(a)`, i.e. CollectionsKt__CollectionsJVMKt.listOf) is enough; afterwards a singleton's field diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkLambdas.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkLambdas.java index 6353f3965..180116945 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkLambdas.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkLambdas.java @@ -1,11 +1,11 @@ package io.codelaser.maddi.modification.link.kotlin; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; - /* The FunctionN path: a lambda passed to our own higher-order function, a lambda and a bound method reference as return values, and SAM conversion of a Kotlin lambda to a JDK functional interface (removeIf, computeIfAbsent, diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkTypes.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkTypes.java index f5bcfde02..b2da8527b 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkTypes.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkTypes.java @@ -1,12 +1,12 @@ package io.codelaser.maddi.modification.link.kotlin; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - /* Kotlin's own type shapes, linked: a data class (constructor, componentN, destructuring, copy), a property of another class, an `object` (a singleton INSTANCE with instance fields, as kotlinc emits it), a loop collecting into diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/nullflow/TestNullFlowProbe.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/nullflow/TestNullFlowProbe.java index 387d3e248..4382560d8 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/nullflow/TestNullFlowProbe.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/nullflow/TestNullFlowProbe.java @@ -1,5 +1,17 @@ package io.codelaser.maddi.modification.link.nullflow; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Map; +import java.util.TreeMap; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.variable.Variable; @@ -15,17 +27,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.Map; -import java.util.TreeMap; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; /** * Nullability feasibility probe (2026-10-06): does a {@code null} literal survive in the link graph, as a constant diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestAssignToField.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestAssignToField.java index c6f2b1268..1b91a3dc0 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestAssignToField.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestAssignToField.java @@ -18,6 +18,16 @@ package io.codelaser.maddi.modification.link.staticvalues; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; @@ -26,15 +36,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.Statement; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; public class TestAssignToField extends CommonTest { @Language("java") diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestStaticValues1.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestStaticValues1.java index ef161f259..e9def89ef 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestStaticValues1.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestStaticValues1.java @@ -1,14 +1,15 @@ package io.codelaser.maddi.modification.link.staticvalues; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; -import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.util.stream.Collectors; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.VariableExpression; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -18,15 +19,15 @@ import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.LocalVariable; import io.codelaser.maddi.cst.api.variable.Variable; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.stream.Collectors; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import io.codelaser.maddi.modification.prepwork.variable.VariableData; +import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestStaticValues1 extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestStaticValuesGetSet.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestStaticValuesGetSet.java index b059f645f..48562a02f 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestStaticValuesGetSet.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestStaticValuesGetSet.java @@ -18,6 +18,17 @@ package io.codelaser.maddi.modification.link.staticvalues; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.FieldInfo; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.modification.common.getset.ApplyGetSetTranslation; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; @@ -28,16 +39,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.FieldInfo; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.Statement; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.*; public class TestStaticValuesGetSet extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestStaticValuesIndexing.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestStaticValuesIndexing.java index c94a65623..912d0e88e 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestStaticValuesIndexing.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestStaticValuesIndexing.java @@ -1,5 +1,15 @@ package io.codelaser.maddi.modification.link.staticvalues; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; @@ -8,15 +18,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.Statement; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; public class TestStaticValuesIndexing extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestStaticValuesMerge.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestStaticValuesMerge.java index 2ce62e960..5d47ae9a1 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestStaticValuesMerge.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestStaticValuesMerge.java @@ -17,6 +17,16 @@ package io.codelaser.maddi.modification.link.staticvalues; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; @@ -24,15 +34,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.Statement; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; public class TestStaticValuesMerge extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestStaticValuesRecord.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestStaticValuesRecord.java index 11a6bda51..cf5fd2f54 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestStaticValuesRecord.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/staticvalues/TestStaticValuesRecord.java @@ -17,17 +17,15 @@ package io.codelaser.maddi.modification.link.staticvalues; -import io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer; -import io.codelaser.maddi.modification.common.getset.ApplyGetSetTranslation; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; -import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; -import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.info.FieldInfo; @@ -41,14 +39,17 @@ import io.codelaser.maddi.cst.api.variable.LocalVariable; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer; +import io.codelaser.maddi.modification.common.getset.ApplyGetSetTranslation; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; +import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; +import io.codelaser.maddi.modification.prepwork.variable.VariableData; +import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestStaticValuesRecord extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestArrayAccess.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestArrayAccess.java index 9f3ad3885..99b14037c 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestArrayAccess.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestArrayAccess.java @@ -1,5 +1,16 @@ package io.codelaser.maddi.modification.link.typelink; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.expression.MethodCall; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; @@ -9,16 +20,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.expression.MethodCall; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.Statement; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; public class TestArrayAccess extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestAssignmentIdentityMethod.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestAssignmentIdentityMethod.java index f6cecadf8..c0ca251e7 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestAssignmentIdentityMethod.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestAssignmentIdentityMethod.java @@ -1,6 +1,14 @@ package io.codelaser.maddi.modification.link.typelink; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; @@ -11,13 +19,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; public class TestAssignmentIdentityMethod extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestBiFunction.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestBiFunction.java index 2f6bdf497..53141e8d2 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestBiFunction.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestBiFunction.java @@ -1,5 +1,14 @@ package io.codelaser.maddi.modification.link.typelink; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; @@ -10,14 +19,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; public class TestBiFunction extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestCollectorSpec.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestCollectorSpec.java index 88206c2e1..15c1629e9 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestCollectorSpec.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestCollectorSpec.java @@ -1,19 +1,20 @@ package io.codelaser.maddi.modification.link.typelink; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.HashMap; +import java.util.Map; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; -import java.util.HashMap; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; /** * Specification-by-example for collectors ({@code Stream.collect(Collector)}). See {@code linking-manual.md} diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestConstructor.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestConstructor.java index 469fed5e0..49f83b1ce 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestConstructor.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestConstructor.java @@ -1,6 +1,22 @@ package io.codelaser.maddi.modification.link.typelink; +import static io.codelaser.maddi.modification.link.impl.LinkComputerImpl.VARIABLES_LINKED_TO_OBJECT; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.expression.MethodCall; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; @@ -8,21 +24,6 @@ import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.variable.*; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.expression.MethodCall; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.Statement; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static io.codelaser.maddi.modification.link.impl.LinkComputerImpl.VARIABLES_LINKED_TO_OBJECT; -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; public class TestConstructor extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestConsumers.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestConsumers.java index 218828f38..d9e3a0097 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestConsumers.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestConsumers.java @@ -1,5 +1,17 @@ package io.codelaser.maddi.modification.link.typelink; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.expression.Lambda; +import io.codelaser.maddi.cst.api.expression.MethodCall; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; @@ -8,17 +20,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.expression.Lambda; -import io.codelaser.maddi.cst.api.expression.MethodCall; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; public class TestConsumers extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestForEach.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestForEach.java index c534631e4..60a9cfc78 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestForEach.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestForEach.java @@ -1,12 +1,14 @@ package io.codelaser.maddi.modification.link.typelink; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.*; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.Iterator; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -14,14 +16,13 @@ import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import java.util.Iterator; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.*; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestForEach extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestForEachLambda.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestForEachLambda.java index f23a3f054..a3746a6e5 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestForEachLambda.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestForEachLambda.java @@ -1,14 +1,14 @@ package io.codelaser.maddi.modification.link.typelink; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.*; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.Lambda; import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -17,13 +17,14 @@ import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.*; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestForEachLambda extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestForEachMethodReference.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestForEachMethodReference.java index 8db810f51..4fbf85b21 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestForEachMethodReference.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestForEachMethodReference.java @@ -1,13 +1,14 @@ package io.codelaser.maddi.modification.link.typelink; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.*; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.expression.MethodReference; import io.codelaser.maddi.cst.api.expression.VariableExpression; @@ -16,13 +17,13 @@ import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.api.variable.This; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.fail; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.*; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestForEachMethodReference extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestFunction.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestFunction.java index c201282f6..9df22b376 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestFunction.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestFunction.java @@ -1,5 +1,16 @@ package io.codelaser.maddi.modification.link.typelink; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Optional; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; @@ -12,16 +23,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import java.util.Optional; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; public class TestFunction extends CommonTest { @Language("java") diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestGapOwnFieldModification.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestGapOwnFieldModification.java index 44832f1c7..23e7c2a22 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestGapOwnFieldModification.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestGapOwnFieldModification.java @@ -1,17 +1,18 @@ package io.codelaser.maddi.modification.link.typelink; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * The 'assigned' component of METHOD_LINKS: own-field SLOT writes, orthogonal to the object-modification diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestLanguageConstructs.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestLanguageConstructs.java index ca7bec302..4cfd8267b 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestLanguageConstructs.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestLanguageConstructs.java @@ -1,17 +1,18 @@ package io.codelaser.maddi.modification.link.typelink; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * Exercises how the link/modification analysis handles a range of Java language constructs (the input is what diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestList.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestList.java index eb8c97bc8..4a85f1991 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestList.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestList.java @@ -1,15 +1,16 @@ package io.codelaser.maddi.modification.link.typelink; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; -import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.*; -import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; -import io.codelaser.maddi.modification.prepwork.variable.impl.ReturnVariableImpl; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; + +import java.util.List; +import java.util.Set; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.info.FieldInfo; @@ -20,16 +21,16 @@ import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.Set; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; +import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.*; +import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; +import io.codelaser.maddi.modification.prepwork.variable.impl.ReturnVariableImpl; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestList extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestMap.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestMap.java index 4d05b6352..75ccc9213 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestMap.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestMap.java @@ -1,11 +1,13 @@ package io.codelaser.maddi.modification.link.typelink; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.*; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.Map; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; @@ -13,13 +15,12 @@ import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import java.util.Map; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.*; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestMap extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestPrefix.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestPrefix.java index 900380044..7a7329623 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestPrefix.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestPrefix.java @@ -1,25 +1,26 @@ package io.codelaser.maddi.modification.link.typelink; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.AbstractMap; +import java.util.stream.Stream; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.prepwork.variable.Links; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.Links; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import java.util.AbstractMap; -import java.util.stream.Stream; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; public class TestPrefix extends CommonTest { @Language("java") diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestShallowArray.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestShallowArray.java index 4f03006d7..f0f479de1 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestShallowArray.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestShallowArray.java @@ -1,17 +1,18 @@ package io.codelaser.maddi.modification.link.typelink; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; public class TestShallowArray extends CommonTest { @Language("java") diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestShallowPrefix.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestShallowPrefix.java index adf7ee9e7..14e0784c1 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestShallowPrefix.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestShallowPrefix.java @@ -1,5 +1,13 @@ package io.codelaser.maddi.modification.link.typelink; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; @@ -8,13 +16,6 @@ import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.variable.Link; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; public class TestShallowPrefix extends CommonTest { @Language("java") diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestStaticBiFunction.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestStaticBiFunction.java index 81bd15456..ef5faab9f 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestStaticBiFunction.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestStaticBiFunction.java @@ -1,26 +1,27 @@ package io.codelaser.maddi.modification.link.typelink; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.link.impl.localvar.AppliedFunctionalInterfaceVariable; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.link.impl.localvar.AppliedFunctionalInterfaceVariable; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.variable.Links; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; public class TestStaticBiFunction extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestStream.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestStream.java index 17250b728..6101db297 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestStream.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestStream.java @@ -1,5 +1,24 @@ package io.codelaser.maddi.modification.link.typelink; +import static io.codelaser.maddi.modification.link.impl.LinkComputerImpl.VARIABLES_LINKED_TO_OBJECT; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.util.AbstractMap; +import java.util.stream.Stream; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.expression.MethodCall; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; +import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; @@ -12,24 +31,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.expression.MethodCall; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; -import io.codelaser.maddi.cst.api.statement.Statement; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.AbstractMap; -import java.util.stream.Stream; - -import static io.codelaser.maddi.modification.link.impl.LinkComputerImpl.VARIABLES_LINKED_TO_OBJECT; -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; public class TestStream extends CommonTest { @Language("java") diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestStreamBasics.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestStreamBasics.java index aeed27889..dd8f6589d 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestStreamBasics.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestStreamBasics.java @@ -1,30 +1,31 @@ package io.codelaser.maddi.modification.link.typelink; +import static io.codelaser.maddi.modification.link.impl.LinkComputerImpl.VARIABLES_LINKED_TO_OBJECT; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.expression.MethodCall; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; +import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; -import io.codelaser.maddi.modification.prepwork.variable.Links; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.Links; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.expression.MethodCall; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; -import io.codelaser.maddi.cst.api.statement.Statement; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.LinkComputerImpl.VARIABLES_LINKED_TO_OBJECT; -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; public class TestStreamBasics extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestStreamForEachSpec.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestStreamForEachSpec.java index b3ab7ca17..3a26a065f 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestStreamForEachSpec.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestStreamForEachSpec.java @@ -1,19 +1,20 @@ package io.codelaser.maddi.modification.link.typelink; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.HashMap; +import java.util.Map; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; -import java.util.HashMap; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; /** * Specification-by-example for consumers ({@code Collection.forEach}, {@code Stream.peek}) — the safety net for diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestStreamMapSpec.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestStreamMapSpec.java index bfee327da..fb0c880e8 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestStreamMapSpec.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestStreamMapSpec.java @@ -1,22 +1,23 @@ package io.codelaser.maddi.modification.link.typelink; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.TestInstance; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.HashMap; import java.util.Map; import java.util.stream.Stream; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; /** * Specification-by-example for {@code Stream.map(...)} (and closely related {@code Optional.map}) linking — the diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestSupplier.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestSupplier.java index 051a75606..744c91512 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestSupplier.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestSupplier.java @@ -1,5 +1,15 @@ package io.codelaser.maddi.modification.link.typelink; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Optional; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; @@ -11,15 +21,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import java.util.Optional; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertEquals; public class TestSupplier extends CommonTest { @Language("java") diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestSupplierSpec.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestSupplierSpec.java index bc4ed01e0..a7a854946 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestSupplierSpec.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/typelink/TestSupplierSpec.java @@ -1,19 +1,20 @@ package io.codelaser.maddi.modification.link.typelink; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.HashMap; +import java.util.Map; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; -import java.util.HashMap; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; /** * Specification-by-example for suppliers ({@code Supplier}: {@code T get()}, no parameters) — the safety net for diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestInnerOfGenericClass.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestInnerOfGenericClass.java index 6445ae2a6..e0f3bd119 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestInnerOfGenericClass.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestInnerOfGenericClass.java @@ -1,17 +1,18 @@ package io.codelaser.maddi.modification.link.vf; +import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; -import static org.junit.jupiter.api.Assertions.assertNotNull; /** * jenkins's Run: {@code Run.RunExecution exec = RunnerStack.INSTANCE.peek()} and diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldComputer.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldComputer.java index bd35761e9..1169ae0a4 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldComputer.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldComputer.java @@ -1,7 +1,15 @@ package io.codelaser.maddi.modification.link.vf; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +import java.util.*; +import java.util.stream.Stream; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; @@ -9,15 +17,8 @@ import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.Variable; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.*; -import java.util.stream.Stream; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; public class TestVirtualFieldComputer extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldComputer2.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldComputer2.java index cdce1ff49..6058d1e7f 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldComputer2.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldComputer2.java @@ -1,20 +1,21 @@ package io.codelaser.maddi.modification.link.vf; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.File; +import java.nio.file.Path; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.Assignment; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.type.ParameterizedType; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.File; -import java.nio.file.Path; - -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; public class TestVirtualFieldComputer2 extends CommonTest { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldComputer3.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldComputer3.java index b13ca4ff2..dc39369b4 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldComputer3.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldComputer3.java @@ -1,21 +1,22 @@ package io.codelaser.maddi.modification.link.vf; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.prepwork.Util; -import io.codelaser.maddi.cst.api.info.FieldInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.info.TypeParameter; -import io.codelaser.maddi.cst.api.type.ParameterizedType; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; -import static org.junit.jupiter.api.Assertions.*; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.FieldInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.info.TypeParameter; +import io.codelaser.maddi.cst.api.type.ParameterizedType; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.prepwork.Util; /** * Companion to {@link TestVirtualFieldComputer} / {@link TestVirtualFieldComputer2}; covers aspects that were not diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldTable.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldTable.java index e5f6e6211..6f54bc461 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldTable.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldTable.java @@ -1,21 +1,22 @@ package io.codelaser.maddi.modification.link.vf; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.element.Element; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer; import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; -import io.codelaser.maddi.cst.api.element.Element; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * Evidence for virtual-fields.md inconsistency #1 (flat vs pairwise container for >=3 type parameters). diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldTranslationMap.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldTranslationMap.java index 6935b19d4..4ca3adeef 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldTranslationMap.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldTranslationMap.java @@ -1,11 +1,13 @@ package io.codelaser.maddi.modification.link.vf; -import io.codelaser.maddi.modification.link.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.Util; -import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; -import io.codelaser.maddi.modification.prepwork.variable.VirtualFieldTranslationMap; -import io.codelaser.maddi.modification.prepwork.variable.impl.ReturnVariableImpl; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.*; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.VariableExpression; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -13,13 +15,12 @@ import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.Variable; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.*; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.link.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.Util; +import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; +import io.codelaser.maddi.modification.prepwork.variable.VirtualFieldTranslationMap; +import io.codelaser.maddi.modification.prepwork.variable.impl.ReturnVariableImpl; public class TestVirtualFieldTranslationMap extends CommonTest { diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/ClearDerived.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/ClearDerived.java index 0fece638c..a94cd83aa 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/ClearDerived.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/ClearDerived.java @@ -17,6 +17,9 @@ package io.codelaser.maddi.modification.prepwork; +import java.util.function.Consumer; +import java.util.function.Predicate; + import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.PropertyValueMap; import io.codelaser.maddi.cst.api.element.Element; @@ -30,9 +33,6 @@ import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import java.util.function.Consumer; -import java.util.function.Predicate; - /** * Clear-before-recompute for a seeded analysis: before an element that holds the values of an earlier analysis is * analysed again, everything the link computer and the analyzer wrote on it goes, so that the new analysis starts diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/MethodAnalyzer.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/MethodAnalyzer.java index 653aca14d..149045e6b 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/MethodAnalyzer.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/MethodAnalyzer.java @@ -17,10 +17,15 @@ package io.codelaser.maddi.modification.prepwork; -import io.codelaser.maddi.modification.common.getset.ApplyGetSetTranslation; -import io.codelaser.maddi.modification.prepwork.escape.ComputeAlwaysEscapes; -import io.codelaser.maddi.modification.prepwork.variable.*; -import io.codelaser.maddi.modification.prepwork.variable.impl.*; +import static io.codelaser.maddi.modification.prepwork.StatementIndex.*; + +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.codelaser.maddi.cst.api.analysis.Codec; import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.PropertyValueMap; @@ -29,7 +34,6 @@ import io.codelaser.maddi.cst.api.element.RecordPattern; import io.codelaser.maddi.cst.api.expression.*; import io.codelaser.maddi.cst.api.info.FieldInfo; -import io.codelaser.maddi.cst.api.info.InfoMap; import io.codelaser.maddi.cst.api.info.InfoMapView; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; @@ -39,15 +43,11 @@ import io.codelaser.maddi.cst.api.variable.*; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.common.getset.ApplyGetSetTranslation; +import io.codelaser.maddi.modification.prepwork.escape.ComputeAlwaysEscapes; +import io.codelaser.maddi.modification.prepwork.variable.*; +import io.codelaser.maddi.modification.prepwork.variable.impl.*; import io.codelaser.maddi.support.Either; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.*; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static io.codelaser.maddi.modification.prepwork.StatementIndex.*; /* do all the analysis of this phase diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/PrepAnalyzer.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/PrepAnalyzer.java index 7a232583c..e36a814f9 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/PrepAnalyzer.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/PrepAnalyzer.java @@ -17,18 +17,26 @@ package io.codelaser.maddi.modification.prepwork; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Predicate; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.codelaser.maddi.callgraph.CallGraphContributions; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.modification.common.getset.ApplyGetSetTranslation; -import io.codelaser.maddi.modification.common.AnalyzerException; -import io.codelaser.maddi.modification.common.getset.GetSetHelper; -import io.codelaser.maddi.inspection.api.parser.ParseResult; -import io.codelaser.maddi.inspection.api.byname.ByNameReference; -import io.codelaser.maddi.inspection.api.byname.ByNameSink; import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.callgraph.ComputeCallGraph; -import io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField; import io.codelaser.maddi.cst.api.analysis.Property; +import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.ModuleInfo; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -39,20 +47,13 @@ import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.graph.G; import io.codelaser.maddi.graph.util.TimedLogger; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.function.Predicate; -import java.util.stream.Collectors; -import java.util.stream.Stream; +import io.codelaser.maddi.inspection.api.byname.ByNameReference; +import io.codelaser.maddi.inspection.api.byname.ByNameSink; +import io.codelaser.maddi.inspection.api.parser.ParseResult; +import io.codelaser.maddi.modification.common.AnalyzerException; +import io.codelaser.maddi.modification.common.getset.ApplyGetSetTranslation; +import io.codelaser.maddi.modification.common.getset.GetSetHelper; +import io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField; /* do all the analysis of this phase diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/Util.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/Util.java index 6cf54689a..7dd0572c6 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/Util.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/Util.java @@ -17,29 +17,29 @@ package io.codelaser.maddi.modification.prepwork; -import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; +import static io.codelaser.maddi.modification.prepwork.StatementIndex.*; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.stream.Stream; + +import org.jetbrains.annotations.NotNull; + import io.codelaser.maddi.cst.api.expression.IntConstant; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.statement.Block; -import io.codelaser.maddi.cst.api.statement.ThrowStatement; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.info.TypeParameter; +import io.codelaser.maddi.cst.api.statement.Block; +import io.codelaser.maddi.cst.api.statement.ThrowStatement; import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.*; -import org.jetbrains.annotations.NotNull; - -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; -import java.util.regex.Matcher; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static io.codelaser.maddi.modification.prepwork.StatementIndex.*; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; public class Util { diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/callgraph/ComputePartOfConstructionFinalField.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/callgraph/ComputePartOfConstructionFinalField.java index 1e904eed5..c48c196d5 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/callgraph/ComputePartOfConstructionFinalField.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/callgraph/ComputePartOfConstructionFinalField.java @@ -17,11 +17,15 @@ package io.codelaser.maddi.modification.prepwork.callgraph; -import io.codelaser.maddi.callgraph.ComputeCallGraph; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Predicate; +import java.util.stream.Collectors; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; -import io.codelaser.maddi.modification.prepwork.variable.VariableInfoContainer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.callgraph.ComputeCallGraph; import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.FieldInfo; @@ -35,13 +39,9 @@ import io.codelaser.maddi.graph.G; import io.codelaser.maddi.graph.V; import io.codelaser.maddi.graph.util.TimedLogger; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.*; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.function.Predicate; -import java.util.stream.Collectors; +import io.codelaser.maddi.modification.prepwork.variable.VariableData; +import io.codelaser.maddi.modification.prepwork.variable.VariableInfoContainer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class ComputePartOfConstructionFinalField { private static final Logger LOGGER = LoggerFactory.getLogger(ComputePartOfConstructionFinalField.class); diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/escape/ComputeAlwaysEscapes.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/escape/ComputeAlwaysEscapes.java index 7f795f183..2cc8cc925 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/escape/ComputeAlwaysEscapes.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/escape/ComputeAlwaysEscapes.java @@ -17,6 +17,8 @@ package io.codelaser.maddi.modification.prepwork.escape; +import java.util.List; + import io.codelaser.maddi.cst.api.expression.ConstructorCall; import io.codelaser.maddi.cst.api.expression.Expression; import io.codelaser.maddi.cst.api.expression.Lambda; @@ -25,8 +27,6 @@ import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import java.util.List; - public class ComputeAlwaysEscapes { diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/AnalysisFingerprint.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/AnalysisFingerprint.java index 9b3406cba..d53c518b1 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/AnalysisFingerprint.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/AnalysisFingerprint.java @@ -17,17 +17,6 @@ package io.codelaser.maddi.modification.prepwork.io; -import io.codelaser.maddi.modification.prepwork.MethodAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.analysis.Codec; -import io.codelaser.maddi.cst.api.analysis.Property; -import io.codelaser.maddi.cst.api.element.FingerPrint; -import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.runtime.Runtime; -import io.codelaser.maddi.cst.io.CodecImpl; -import io.codelaser.maddi.inspection.api.resource.MD5FingerPrint; - import java.io.IOException; import java.io.StringWriter; import java.io.UncheckedIOException; @@ -41,6 +30,17 @@ import java.util.Set; import java.util.function.Predicate; +import io.codelaser.maddi.cst.api.analysis.Codec; +import io.codelaser.maddi.cst.api.analysis.Property; +import io.codelaser.maddi.cst.api.element.FingerPrint; +import io.codelaser.maddi.cst.api.element.SourceSet; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.runtime.Runtime; +import io.codelaser.maddi.cst.io.CodecImpl; +import io.codelaser.maddi.inspection.api.resource.MD5FingerPrint; +import io.codelaser.maddi.modification.prepwork.MethodAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; + /** * The analysisFingerprint: an MD5 over the canonical cst-io codec dump of a primary type's analyzer * output. Two analyses whose fingerprints match produced the same cross-type-observable result, so a dependent diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/DecoratorImpl.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/DecoratorImpl.java index 764963867..e21a887eb 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/DecoratorImpl.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/DecoratorImpl.java @@ -17,6 +17,13 @@ package io.codelaser.maddi.modification.prepwork.io; +import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.MUTABLE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; + +import java.util.*; + import io.codelaser.maddi.annotation.*; import io.codelaser.maddi.annotation.eventual.Mark; import io.codelaser.maddi.annotation.eventual.Only; @@ -44,13 +51,6 @@ import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import java.util.*; - -import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.*; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.MUTABLE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.DEPENDENT; - public class DecoratorImpl implements Qualification.Decorator { private final Runtime runtime; private final AnnotationExpression notModifiedAnnotation; diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/IncrementalState.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/IncrementalState.java index fb5b08f82..706f98c3d 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/IncrementalState.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/IncrementalState.java @@ -17,13 +17,6 @@ package io.codelaser.maddi.modification.prepwork.io; -import io.codelaser.maddi.cst.api.element.FingerPrint; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.runtime.Runtime; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.io.File; import java.io.IOException; import java.nio.file.Files; @@ -33,6 +26,14 @@ import java.util.TreeMap; import java.util.TreeSet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.cst.api.element.FingerPrint; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.runtime.Runtime; + /** * Task #35 phase C: the state a checkpointed run leaves behind so the NEXT run can do incremental * early-cutoff at the right granularity — diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/LoadAnalysisResults.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/LoadAnalysisResults.java index c694868cb..e6fabd67f 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/LoadAnalysisResults.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/LoadAnalysisResults.java @@ -17,21 +17,6 @@ package io.codelaser.maddi.modification.prepwork.io; -import io.codelaser.maddi.cst.api.analysis.Codec; -import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.runtime.Runtime; -import io.codelaser.maddi.cst.io.CodecImpl; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import org.parsers.json.JSONParser; -import org.parsers.json.Node; -import org.parsers.json.ast.Array; -import org.parsers.json.ast.JSONObject; -import org.parsers.json.ast.KeyValuePair; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.io.*; import java.net.URL; import java.nio.file.Files; @@ -46,6 +31,22 @@ import java.util.regex.Pattern; import java.util.stream.Stream; +import org.parsers.json.JSONParser; +import org.parsers.json.Node; +import org.parsers.json.ast.Array; +import org.parsers.json.ast.JSONObject; +import org.parsers.json.ast.KeyValuePair; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.cst.api.analysis.Codec; +import io.codelaser.maddi.cst.api.element.SourceSet; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.runtime.Runtime; +import io.codelaser.maddi.cst.io.CodecImpl; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; + /** * Loads analysis-result ("annotated API") archives, applying each stored hint to the corresponding {@link Info}. *

diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/NullabilityDecorator.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/NullabilityDecorator.java index c55142341..f40c4d831 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/NullabilityDecorator.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/NullabilityDecorator.java @@ -17,6 +17,12 @@ package io.codelaser.maddi.modification.prepwork.io; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; +import java.util.stream.Stream; + import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.element.Comment; import io.codelaser.maddi.cst.api.element.CompilationUnit; @@ -35,12 +41,6 @@ import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; -import java.util.TreeSet; -import java.util.stream.Stream; - /** * Annotated Java output for the inferred nullability (maddi-mod docs/design/nullability.md D1): reads the B2 * properties ({@code NULLABILITY_FIELD}, {@code _PARAMETER}, {@code _METHOD}) and writes {@code @Nullable}, and diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/PrepWorkCodec.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/PrepWorkCodec.java index 59a364ad6..057a28e45 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/PrepWorkCodec.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/PrepWorkCodec.java @@ -17,9 +17,10 @@ package io.codelaser.maddi.modification.prepwork.io; -import io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField; -import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; -import io.codelaser.maddi.modification.prepwork.variable.impl.ReturnVariableImpl; +import java.util.List; +import java.util.Map; +import java.util.function.BiFunction; + import io.codelaser.maddi.cst.api.analysis.Codec; import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.Value; @@ -30,10 +31,9 @@ import io.codelaser.maddi.cst.impl.analysis.PropertyProviderImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.cst.io.CodecImpl; - -import java.util.List; -import java.util.Map; -import java.util.function.BiFunction; +import io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField; +import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; +import io.codelaser.maddi.modification.prepwork.variable.impl.ReturnVariableImpl; public class PrepWorkCodec { diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/WriteAnalysisResults.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/WriteAnalysisResults.java index 19faaca7e..f79ad88ce 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/WriteAnalysisResults.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/WriteAnalysisResults.java @@ -17,18 +17,6 @@ package io.codelaser.maddi.modification.prepwork.io; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.cst.api.analysis.Codec; -import io.codelaser.maddi.cst.api.analysis.Property; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.cst.api.info.*; -import io.codelaser.maddi.cst.api.runtime.Runtime; -import io.codelaser.maddi.cst.io.CodecImpl; -import io.codelaser.maddi.util.Trie; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.io.File; import java.io.IOException; import java.io.OutputStreamWriter; @@ -44,6 +32,19 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.cst.api.analysis.Codec; +import io.codelaser.maddi.cst.api.analysis.Property; +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.element.SourceSet; +import io.codelaser.maddi.cst.api.info.*; +import io.codelaser.maddi.cst.api.runtime.Runtime; +import io.codelaser.maddi.cst.io.CodecImpl; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.util.Trie; + public class WriteAnalysisResults { private static final Logger LOGGER = LoggerFactory.getLogger(WriteAnalysisResults.class); diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/Link.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/Link.java index 632ff8963..f97d3d920 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/Link.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/Link.java @@ -1,12 +1,13 @@ package io.codelaser.maddi.modification.prepwork.variable; +import java.util.Set; +import java.util.stream.Stream; + +import org.jetbrains.annotations.NotNull; + import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.translate.TranslationMap; import io.codelaser.maddi.cst.api.variable.Variable; -import org.jetbrains.annotations.NotNull; - -import java.util.Set; -import java.util.stream.Stream; public interface Link extends Comparable { diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/LinkNature.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/LinkNature.java index e556fc91e..077c2ed6b 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/LinkNature.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/LinkNature.java @@ -1,10 +1,10 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.cst.api.info.MethodInfo; - import java.util.List; import java.util.Set; +import io.codelaser.maddi.cst.api.info.MethodInfo; + public interface LinkNature extends Comparable { boolean isAssignedFrom(); diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/LinkedVariables.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/LinkedVariables.java index b736c7d8e..f8e1bf843 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/LinkedVariables.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/LinkedVariables.java @@ -1,10 +1,10 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.cst.api.variable.Variable; - import java.util.Map; import java.util.stream.Stream; +import io.codelaser.maddi.cst.api.variable.Variable; + // Primarily a helper type to carry around multiple Links objects. Not a "deliverable". public interface LinkedVariables extends Iterable> { diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/Links.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/Links.java index 86e854389..a43a26e1b 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/Links.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/Links.java @@ -1,12 +1,5 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.Util; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.runtime.Runtime; -import io.codelaser.maddi.cst.api.translate.TranslationMap; -import io.codelaser.maddi.cst.api.variable.Variable; -import org.jetbrains.annotations.NotNull; - import java.util.Collection; import java.util.List; import java.util.Set; @@ -14,6 +7,14 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +import org.jetbrains.annotations.NotNull; + +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.runtime.Runtime; +import io.codelaser.maddi.cst.api.translate.TranslationMap; +import io.codelaser.maddi.cst.api.variable.Variable; +import io.codelaser.maddi.modification.prepwork.Util; + /* Links from one variable (primary) and its constituent parts ("fields") to other variables. This is the main object stored in the analysis() of VariableInfo, and the main constituent of diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/MethodLinkedVariables.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/MethodLinkedVariables.java index 01f6f23f1..3837b9922 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/MethodLinkedVariables.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/MethodLinkedVariables.java @@ -1,13 +1,13 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.translate.TranslationMap; -import io.codelaser.maddi.cst.api.variable.Variable; - import java.util.List; import java.util.Set; import java.util.stream.Collectors; +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.translate.TranslationMap; +import io.codelaser.maddi.cst.api.variable.Variable; + public interface MethodLinkedVariables extends Value { // content diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/ReturnVariable.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/ReturnVariable.java index 3062c5bc8..136a9e1b6 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/ReturnVariable.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/ReturnVariable.java @@ -18,7 +18,6 @@ package io.codelaser.maddi.modification.prepwork.variable; import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeParameter; import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.Variable; diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/VariableData.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/VariableData.java index c54ad83df..5b8aec2c6 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/VariableData.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/VariableData.java @@ -17,13 +17,13 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.variable.Variable; - import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.variable.Variable; + public interface VariableData extends Value { Set knownVariableNames(); diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/VariableInfo.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/VariableInfo.java index ed39936ec..f79d0fc49 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/VariableInfo.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/VariableInfo.java @@ -17,14 +17,13 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.variable.impl.Assignments; -import io.codelaser.maddi.modification.prepwork.variable.impl.Reads; +import java.util.Set; + import io.codelaser.maddi.cst.api.analysis.PropertyValueMap; -import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.variable.Variable; - -import java.util.Set; +import io.codelaser.maddi.modification.prepwork.variable.impl.Assignments; +import io.codelaser.maddi.modification.prepwork.variable.impl.Reads; public interface VariableInfo { diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/VirtualFieldTranslationMap.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/VirtualFieldTranslationMap.java index 25bf0729b..9d7462196 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/VirtualFieldTranslationMap.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/VirtualFieldTranslationMap.java @@ -1,12 +1,12 @@ package io.codelaser.maddi.modification.prepwork.variable; +import java.util.stream.Stream; + import io.codelaser.maddi.cst.api.info.TypeParameter; import io.codelaser.maddi.cst.api.translate.TranslationMap; import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.FieldReference; -import java.util.stream.Stream; - public interface VirtualFieldTranslationMap extends TranslationMap { void put(TypeParameter in, ParameterizedType out); diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/Assignments.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/Assignments.java index 1d56dae59..f2b60c887 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/Assignments.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/Assignments.java @@ -18,17 +18,17 @@ package io.codelaser.maddi.modification.prepwork.variable.impl; +import java.util.*; +import java.util.stream.Stream; + +import io.codelaser.maddi.cst.api.expression.Expression; +import io.codelaser.maddi.cst.api.statement.*; import io.codelaser.maddi.modification.prepwork.StatementIndex; import io.codelaser.maddi.modification.prepwork.Util; import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.VariableInfoContainer; -import io.codelaser.maddi.cst.api.expression.Expression; -import io.codelaser.maddi.cst.api.statement.*; - -import java.util.*; -import java.util.stream.Stream; public class Assignments { diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/LinksImpl.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/LinksImpl.java index a347c7601..aaed497fa 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/LinksImpl.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/LinksImpl.java @@ -1,14 +1,15 @@ package io.codelaser.maddi.modification.prepwork.variable.impl; -import io.codelaser.maddi.modification.prepwork.Util; -import io.codelaser.maddi.modification.prepwork.variable.Link; -import io.codelaser.maddi.modification.prepwork.variable.LinkNature; -import io.codelaser.maddi.modification.prepwork.variable.Links; -import io.codelaser.maddi.modification.prepwork.variable.VirtualFieldTranslationMap; +import java.util.*; +import java.util.function.Predicate; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.jetbrains.annotations.NotNull; + import io.codelaser.maddi.cst.api.analysis.Codec; import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.info.InfoMap; import io.codelaser.maddi.cst.api.info.InfoMapView; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.api.translate.TranslationMap; @@ -16,12 +17,11 @@ import io.codelaser.maddi.cst.api.variable.This; import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import org.jetbrains.annotations.NotNull; - -import java.util.*; -import java.util.function.Predicate; -import java.util.stream.Collectors; -import java.util.stream.Stream; +import io.codelaser.maddi.modification.prepwork.Util; +import io.codelaser.maddi.modification.prepwork.variable.Link; +import io.codelaser.maddi.modification.prepwork.variable.LinkNature; +import io.codelaser.maddi.modification.prepwork.variable.Links; +import io.codelaser.maddi.modification.prepwork.variable.VirtualFieldTranslationMap; public class LinksImpl implements Links { diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/ObjectCreationVariableImpl.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/ObjectCreationVariableImpl.java index d1f539ab6..620e08be1 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/ObjectCreationVariableImpl.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/ObjectCreationVariableImpl.java @@ -17,10 +17,13 @@ package io.codelaser.maddi.modification.prepwork.variable.impl; +import java.util.List; +import java.util.Objects; +import java.util.function.Predicate; +import java.util.stream.Stream; + import io.codelaser.maddi.annotation.rare.IgnoreModifications; -import io.codelaser.maddi.modification.prepwork.variable.ObjectCreationVariable; import io.codelaser.maddi.cst.api.element.*; -import io.codelaser.maddi.cst.api.info.InfoMap; import io.codelaser.maddi.cst.api.info.InfoMapView; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -33,11 +36,7 @@ import io.codelaser.maddi.cst.impl.element.SourceImpl; import io.codelaser.maddi.cst.impl.output.OutputBuilderImpl; import io.codelaser.maddi.cst.impl.output.TextImpl; - -import java.util.List; -import java.util.Objects; -import java.util.function.Predicate; -import java.util.stream.Stream; +import io.codelaser.maddi.modification.prepwork.variable.ObjectCreationVariable; public class ObjectCreationVariableImpl implements ObjectCreationVariable { diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/ReturnVariableImpl.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/ReturnVariableImpl.java index f916bb7b4..332f33512 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/ReturnVariableImpl.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/ReturnVariableImpl.java @@ -17,9 +17,12 @@ package io.codelaser.maddi.modification.prepwork.variable.impl; -import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; +import java.util.List; +import java.util.Objects; +import java.util.function.Predicate; +import java.util.stream.Stream; + import io.codelaser.maddi.cst.api.element.*; -import io.codelaser.maddi.cst.api.info.InfoMap; import io.codelaser.maddi.cst.api.info.InfoMapView; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.output.OutputBuilder; @@ -33,11 +36,7 @@ import io.codelaser.maddi.cst.impl.output.OutputBuilderImpl; import io.codelaser.maddi.cst.impl.output.SpaceEnum; import io.codelaser.maddi.cst.impl.output.TextImpl; - -import java.util.List; -import java.util.Objects; -import java.util.function.Predicate; -import java.util.stream.Stream; +import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; public class ReturnVariableImpl implements ReturnVariable { diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableDataImpl.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableDataImpl.java index 72d015946..770404f43 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableDataImpl.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableDataImpl.java @@ -17,17 +17,6 @@ package io.codelaser.maddi.modification.prepwork.variable.impl; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; -import io.codelaser.maddi.modification.prepwork.variable.VariableInfoContainer; -import io.codelaser.maddi.cst.api.analysis.Codec; -import io.codelaser.maddi.cst.api.analysis.Property; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.info.InfoMap; -import io.codelaser.maddi.cst.api.info.InfoMapView; -import io.codelaser.maddi.cst.api.element.Element; -import io.codelaser.maddi.cst.api.variable.Variable; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; - import java.util.Collections; import java.util.LinkedHashMap; import java.util.LinkedHashSet; @@ -35,6 +24,16 @@ import java.util.Set; import java.util.stream.Stream; +import io.codelaser.maddi.cst.api.analysis.Codec; +import io.codelaser.maddi.cst.api.analysis.Property; +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.element.Element; +import io.codelaser.maddi.cst.api.info.InfoMapView; +import io.codelaser.maddi.cst.api.variable.Variable; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.modification.prepwork.variable.VariableData; +import io.codelaser.maddi.modification.prepwork.variable.VariableInfoContainer; + public class VariableDataImpl implements VariableData { // INTRINSIC: prepwork rebuilds the per-variable/per-statement data from the method body on every run. // carried on a rewire: see rewire() below diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableInfoContainerImpl.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableInfoContainerImpl.java index b83ac4d83..16588c276 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableInfoContainerImpl.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableInfoContainerImpl.java @@ -18,11 +18,11 @@ package io.codelaser.maddi.modification.prepwork.variable.impl; import io.codelaser.maddi.cst.api.info.InfoMapView; +import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.modification.prepwork.variable.Stage; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.VariableInfoContainer; import io.codelaser.maddi.modification.prepwork.variable.VariableNature; -import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.support.Either; import io.codelaser.maddi.support.SetOnce; diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableInfoImpl.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableInfoImpl.java index ba4b5ab05..2b2c0b476 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableInfoImpl.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableInfoImpl.java @@ -17,22 +17,22 @@ package io.codelaser.maddi.modification.prepwork.variable.impl; -import io.codelaser.maddi.cst.api.info.InfoMapView; -import io.codelaser.maddi.modification.prepwork.variable.Link; -import io.codelaser.maddi.modification.prepwork.variable.Links; -import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; -import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; +import java.util.Set; + import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.PropertyValueMap; +import io.codelaser.maddi.cst.api.info.InfoMapView; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.variable.LocalVariable; import io.codelaser.maddi.cst.api.variable.Variable; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.AnalysisAccessRecorder; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.PropertyValueMapImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; - -import java.util.Set; +import io.codelaser.maddi.modification.prepwork.variable.Link; +import io.codelaser.maddi.modification.prepwork.variable.Links; +import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; +import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; public class VariableInfoImpl implements VariableInfo, AnalysisAccessRecorder.Owner { public static final Property UNMODIFIED_VARIABLE = new PropertyImpl("unmodifiedVariable"); diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/CommonTest.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/CommonTest.java index 865ef354c..1a6eb9e57 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/CommonTest.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/CommonTest.java @@ -17,6 +17,22 @@ package io.codelaser.maddi.modification.prepwork; +import static io.codelaser.maddi.inspection.api.integration.JavaInspector.TEST_PROTOCOL; +import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.JAR_WITH_PATH_PREFIX; +import static io.codelaser.maddi.inspection.resource.SourceSetImpl.sourceSetOf; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.List; + +import org.jetbrains.annotations.NotNull; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.slf4j.LoggerFactory; + import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; import io.codelaser.maddi.cst.api.element.SourceSet; @@ -27,24 +43,8 @@ import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; import io.codelaser.maddi.inspection.resource.SourceSetImpl; import io.codelaser.maddi.support.SetOnce; -import org.jetbrains.annotations.NotNull; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; -import org.slf4j.LoggerFactory; - import io.codelaser.maddi.support.SetOnceMap; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.List; - -import static io.codelaser.maddi.inspection.api.integration.JavaInspector.TEST_PROTOCOL; -import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.JAR_WITH_PATH_PREFIX; -import static io.codelaser.maddi.inspection.resource.SourceSetImpl.sourceSetOf; - public class CommonTest { private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(CommonTest.class); protected static final String ABX = "a.b.X"; diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestAnonymousMemberRecord.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestAnonymousMemberRecord.java index 30b6201fc..3019030ca 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestAnonymousMemberRecord.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestAnonymousMemberRecord.java @@ -1,11 +1,12 @@ package io.codelaser.maddi.modification.prepwork; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertNotNull; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import io.codelaser.maddi.cst.api.info.TypeInfo; /** * elasticsearch first contact: a member record of an anonymous class, forward-referenced from a sibling diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestDegradedAnalysisMarker.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestDegradedAnalysisMarker.java index ac239e6aa..36026bed7 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestDegradedAnalysisMarker.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestDegradedAnalysisMarker.java @@ -1,17 +1,18 @@ package io.codelaser.maddi.modification.prepwork; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; +import java.util.Set; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.element.CompilationUnit; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.*; /** * Task #36 (degradation visibility): a type isolated by fault-tolerant prep stamps diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestGap151SwitchInAnonymousField.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestGap151SwitchInAnonymousField.java index 93a4d87ff..51b122d39 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestGap151SwitchInAnonymousField.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestGap151SwitchInAnonymousField.java @@ -1,12 +1,13 @@ package io.codelaser.maddi.modification.prepwork; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.*; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** * #151 PROBE — reducing the Elasticsearch shape until the trigger is isolated. diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestGetSetFieldRewire.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestGetSetFieldRewire.java index 96691fd74..73aced1dd 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestGetSetFieldRewire.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestGetSetFieldRewire.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.modification.prepwork; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.Set; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.InfoMap; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.*; /** * The first {@code carryOnRewire} property: {@code GET_SET_FIELD}. It is set at parse time (record synthetics / diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestImplementationsAfterRewire.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestImplementationsAfterRewire.java index 861cfb1c1..d362d1f34 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestImplementationsAfterRewire.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestImplementationsAfterRewire.java @@ -17,6 +17,22 @@ package io.codelaser.maddi.modification.prepwork; +import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.JAR_WITH_PATH_PREFIX; +import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.TEST_PROTOCOL_PREFIX; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.InfoMap; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -29,21 +45,6 @@ import io.codelaser.maddi.inspection.api.resource.InputConfiguration; import io.codelaser.maddi.inspection.integration.JavaInspectorImpl; import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.StreamSupport; - -import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.JAR_WITH_PATH_PREFIX; -import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.TEST_PROTOCOL_PREFIX; -import static org.junit.jupiter.api.Assertions.*; /** * {@code IMPLEMENTATIONS} is the one analysis value that points against the direction of rewiring: diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestIndependentRewire.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestIndependentRewire.java index fef3b03ac..390d2691c 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestIndependentRewire.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestIndependentRewire.java @@ -17,20 +17,21 @@ package io.codelaser.maddi.modification.prepwork; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.info.InfoMap; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.util.List; import java.util.Map; import java.util.Set; -import static org.junit.jupiter.api.Assertions.*; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.info.InfoMap; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; /** * {@code IndependentImpl} reads like a plain lattice level but is not one: {@code dependentExceptions} holds diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestInheritedSamRewire.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestInheritedSamRewire.java index 77f9ba450..4fe86d649 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestInheritedSamRewire.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestInheritedSamRewire.java @@ -17,15 +17,16 @@ package io.codelaser.maddi.modification.prepwork; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.Set; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; /** * A functional interface may INHERIT its single abstract method from a type that is not being rewired, a JDK diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestPrepAfterPartialReparse.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestPrepAfterPartialReparse.java index c72cdbdf6..64a94e779 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestPrepAfterPartialReparse.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestPrepAfterPartialReparse.java @@ -17,6 +17,22 @@ package io.codelaser.maddi.modification.prepwork; +import static io.codelaser.maddi.inspection.api.integration.JavaInspector.InvalidationState.*; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -29,21 +45,6 @@ import io.codelaser.maddi.inspection.resource.SourceSetImpl; import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static io.codelaser.maddi.inspection.api.integration.JavaInspector.InvalidationState.*; -import static org.junit.jupiter.api.Assertions.*; /** * Prep on the objects a per-file re-parse leaves: re-parsed (INVALID) and rewired (REWIRE) types, next to kept ones. diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestPrepOnePrimaryTypeAtATime.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestPrepOnePrimaryTypeAtATime.java index 873500fc3..8de74b1d8 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestPrepOnePrimaryTypeAtATime.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestPrepOnePrimaryTypeAtATime.java @@ -17,9 +17,20 @@ package io.codelaser.maddi.modification.prepwork; -import io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.JAR_WITH_PATH_PREFIX; +import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.TEST_PROTOCOL_PREFIX; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -33,19 +44,9 @@ import io.codelaser.maddi.inspection.api.resource.InputConfiguration; import io.codelaser.maddi.inspection.integration.JavaInspectorImpl; import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.JAR_WITH_PATH_PREFIX; -import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.TEST_PROTOCOL_PREFIX; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField; +import io.codelaser.maddi.modification.prepwork.variable.VariableData; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** * Prepping primary types one at a time (a fresh {@link PrepAnalyzer} per type, as diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestReprepKeepType.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestReprepKeepType.java index 7368a52c9..3bf6e2e7e 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestReprepKeepType.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestReprepKeepType.java @@ -17,9 +17,20 @@ package io.codelaser.maddi.modification.prepwork; -import io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.JAR_WITH_PATH_PREFIX; +import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.TEST_PROTOCOL_PREFIX; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.statement.Statement; @@ -29,19 +40,9 @@ import io.codelaser.maddi.inspection.api.resource.InputConfiguration; import io.codelaser.maddi.inspection.integration.JavaInspectorImpl; import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.JAR_WITH_PATH_PREFIX; -import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.TEST_PROTOCOL_PREFIX; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField; +import io.codelaser.maddi.modification.prepwork.variable.VariableData; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** * Tier-2 incremental reparse re-runs {@code Prepwork.make()} over ALL primary types, but the types from source diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestCallGraph2.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestCallGraph2.java index 3e27f54f1..8c576fc2b 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestCallGraph2.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestCallGraph2.java @@ -17,39 +17,39 @@ package io.codelaser.maddi.modification.prepwork.callgraph; -import io.codelaser.maddi.callgraph.ComputeCallGraph; -import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; +import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.JAR_WITH_PATH_PREFIX; +import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.TEST_PROTOCOL_PREFIX; +import static org.junit.jupiter.api.Assertions.*; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URISyntaxException; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; +import io.codelaser.maddi.callgraph.ComputeCallGraph; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.statement.ExplicitConstructorInvocation; +import io.codelaser.maddi.graph.G; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.inspection.api.parser.ParseResult; import io.codelaser.maddi.inspection.api.parser.Summary; import io.codelaser.maddi.inspection.api.resource.InputConfiguration; import io.codelaser.maddi.inspection.integration.JavaInspectorImpl; import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; -import io.codelaser.maddi.graph.G; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URISyntaxException; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.JAR_WITH_PATH_PREFIX; -import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.TEST_PROTOCOL_PREFIX; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; public class TestCallGraph2 extends CommonTest { private static final Logger LOGGER = LoggerFactory.getLogger(TestCallGraph2.class); diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestCallGraphLocalClass.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestCallGraphLocalClass.java index f8ab579f0..5de8eefb8 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestCallGraphLocalClass.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestCallGraphLocalClass.java @@ -17,9 +17,22 @@ package io.codelaser.maddi.modification.prepwork.callgraph; +import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.JAR_WITH_PATH_PREFIX; +import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.TEST_PROTOCOL_PREFIX; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.callgraph.ComputeCallGraph; import io.codelaser.maddi.callgraph.PrimaryTypeUseGraph; - import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -33,19 +46,6 @@ import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; import io.codelaser.maddi.modification.prepwork.CommonTest; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.JAR_WITH_PATH_PREFIX; -import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.TEST_PROTOCOL_PREFIX; -import static org.junit.jupiter.api.Assertions.*; /** * A LOCAL CLASS IS A TYPE DECLARED INSIDE A BODY, like an anonymous class and a lambda, and the call graph diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestComputePartOfConstruction.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestComputePartOfConstruction.java index 1f247cdd4..ea4b5e058 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestComputePartOfConstruction.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestComputePartOfConstruction.java @@ -17,27 +17,25 @@ package io.codelaser.maddi.modification.prepwork.callgraph; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; +import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.EMPTY_PART_OF_CONSTRUCTION; +import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.PART_OF_CONSTRUCTION; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.FieldInfo; -import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import io.codelaser.maddi.graph.G; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.stream.Collectors; - -import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.EMPTY_PART_OF_CONSTRUCTION; -import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.PART_OF_CONSTRUCTION; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; public class TestComputePartOfConstruction extends CommonTest { // A copy of TestCallGraph.INPUT3: that test moved to maddi-callgraph with the call graph (split stage 2), diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestEarlyCutoffWorklist.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestEarlyCutoffWorklist.java index bf29fb226..fa7de326d 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestEarlyCutoffWorklist.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestEarlyCutoffWorklist.java @@ -17,15 +17,15 @@ package io.codelaser.maddi.modification.prepwork.callgraph; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.Function; -import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; /** * The early-cutoff worklist, on a use-graph chain {@code A <- B <- C <- D} (B uses A, C uses B, D uses C), edit at A. diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestFinalFieldBranchAssignment.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestFinalFieldBranchAssignment.java index d0c911dcd..905b9e99a 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestFinalFieldBranchAssignment.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestFinalFieldBranchAssignment.java @@ -17,18 +17,19 @@ package io.codelaser.maddi.modification.prepwork.callgraph; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.cst.api.info.FieldInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.FieldInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; // effectively-final-field detection: a field assigned anywhere in the primary type must not be reported final. // The interesting cases are assignments inside lambda / anonymous / local types enclosed by the field's owner: diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestJavadocEdgeIsFiltered.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestJavadocEdgeIsFiltered.java index b0f31d963..c0b784cf5 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestJavadocEdgeIsFiltered.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestJavadocEdgeIsFiltered.java @@ -17,18 +17,19 @@ package io.codelaser.maddi.modification.prepwork.callgraph; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.graph.G; import io.codelaser.maddi.graph.V; import io.codelaser.maddi.modification.prepwork.CommonTest; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * A javadoc link obeys the same {@code accept()} as every other edge. {@code doJavadoc} used to merge an edge diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestPartOfConstructionAndJavadoc.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestPartOfConstructionAndJavadoc.java index d0cb1f936..720efa2a0 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestPartOfConstructionAndJavadoc.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestPartOfConstructionAndJavadoc.java @@ -17,18 +17,19 @@ package io.codelaser.maddi.modification.prepwork.callgraph; +import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.PART_OF_CONSTRUCTION; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.prepwork.CommonTest; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.PART_OF_CONSTRUCTION; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; /** * Documenting a private method is not calling it. {@code computePartOfConstruction} propagates diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestPrimaryTypeUseGraph.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestPrimaryTypeUseGraph.java index ca23ccc93..c312020c6 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestPrimaryTypeUseGraph.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestPrimaryTypeUseGraph.java @@ -17,35 +17,35 @@ package io.codelaser.maddi.modification.prepwork.callgraph; +import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.JAR_WITH_PATH_PREFIX; +import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.TEST_PROTOCOL_PREFIX; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.callgraph.ComputeCallGraph; import io.codelaser.maddi.callgraph.PrimaryTypeUseGraph; - -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.CommonTest; import io.codelaser.maddi.cst.api.element.ModuleInfo; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.graph.G; +import io.codelaser.maddi.graph.ImmutableGraph; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.inspection.api.parser.ParseResult; import io.codelaser.maddi.inspection.api.parser.Summary; import io.codelaser.maddi.inspection.api.resource.InputConfiguration; import io.codelaser.maddi.inspection.integration.JavaInspectorImpl; import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; -import io.codelaser.maddi.graph.G; -import io.codelaser.maddi.graph.ImmutableGraph; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.JAR_WITH_PATH_PREFIX; -import static io.codelaser.maddi.inspection.integration.JavaInspectorImpl.TEST_PROTOCOL_PREFIX; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; /** * The reverse reachability the reload flow runs on. A chain {@code Top -> Mid -> Base} (each using the next): a change diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestTypeUseAnnotationEdge.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestTypeUseAnnotationEdge.java index 29862fba5..4c03c4358 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestTypeUseAnnotationEdge.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestTypeUseAnnotationEdge.java @@ -17,24 +17,24 @@ package io.codelaser.maddi.modification.prepwork.callgraph; -import io.codelaser.maddi.callgraph.ComputeCallGraph; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.Map; +import java.util.Set; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import io.codelaser.maddi.callgraph.ComputeCallGraph; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.graph.G; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.inspection.api.parser.Summary; import io.codelaser.maddi.modification.prepwork.CommonTest; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.net.URISyntaxException; -import java.util.Map; -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.assertTrue; /** * A TYPE_USE-only annotation (the jspecify shape) is a dependency of the member whose signature carries it. diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/clonebench/TestCloneBenchMethodHistogram.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/clonebench/TestCloneBenchMethodHistogram.java index bc89b44c3..b9272063e 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/clonebench/TestCloneBenchMethodHistogram.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/clonebench/TestCloneBenchMethodHistogram.java @@ -17,19 +17,8 @@ package io.codelaser.maddi.modification.prepwork.clonebench; -import io.codelaser.maddi.modification.common.CloneBenchCorpus; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.cst.api.expression.MethodCall; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.File; import java.io.IOException; @@ -38,9 +27,21 @@ import java.util.List; import java.util.Map; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.cst.api.element.SourceSet; +import io.codelaser.maddi.cst.api.expression.MethodCall; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.codelaser.maddi.modification.common.CloneBenchCorpus; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; /* Frequency histogram of EXTERNAL (JDK/library) method calls over the clone-bench corpus, to see which APIs diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/escape/TestAlwaysEscapes.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/escape/TestAlwaysEscapes.java index 85cda087c..bf96a4403 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/escape/TestAlwaysEscapes.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/escape/TestAlwaysEscapes.java @@ -17,18 +17,19 @@ package io.codelaser.maddi.modification.prepwork.escape; -import io.codelaser.maddi.modification.prepwork.CommonTest; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.statement.IfElseStatement; import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.api.statement.TryStatement; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.modification.prepwork.CommonTest; public class TestAlwaysEscapes extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestAnalysisResultsFormat.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestAnalysisResultsFormat.java index 383d41e2c..39dd407cc 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestAnalysisResultsFormat.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestAnalysisResultsFormat.java @@ -1,20 +1,21 @@ package io.codelaser.maddi.modification.prepwork.io; -import io.codelaser.maddi.cst.api.analysis.Codec; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.util.Trie; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import static org.junit.jupiter.api.Assertions.*; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.analysis.Codec; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.util.Trie; /* The analysis-results format carries a marker (CodeLaser/maddi-mod#3): a file written by another release is refused diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestDecorateEventual.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestDecorateEventual.java index 4e5aa788e..a252d181f 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestDecorateEventual.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestDecorateEventual.java @@ -17,21 +17,22 @@ package io.codelaser.maddi.modification.prepwork.io; -import io.codelaser.maddi.modification.prepwork.CommonTest; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; +import java.util.Set; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.AnnotationExpression; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.prepwork.CommonTest; /** * The write twin of {@code AnnotationToProperty}'s eventual parsing: {@code DecoratorImpl} must turn the computed diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestDecorateStaticSideEffects.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestDecorateStaticSideEffects.java index f17107a6d..cfe23fe7c 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestDecorateStaticSideEffects.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestDecorateStaticSideEffects.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.modification.prepwork.io; -import io.codelaser.maddi.modification.prepwork.CommonTest; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.AnnotationExpression; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.prepwork.CommonTest; /** * {@code DecoratorImpl} must surface a computed/contracted {@code STATIC_SIDE_EFFECTS_METHOD} verdict as a diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestModuleGatedHints.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestModuleGatedHints.java index 6dd124293..5dd81f1d5 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestModuleGatedHints.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestModuleGatedHints.java @@ -1,7 +1,17 @@ package io.codelaser.maddi.modification.prepwork.io; +import static org.junit.jupiter.api.Assertions.*; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Proxy; +import java.net.URI; +import java.util.List; + +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Codec; import io.codelaser.maddi.cst.api.element.CompilationUnit; +import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; @@ -9,15 +19,6 @@ import io.codelaser.maddi.inspection.api.resource.InputConfiguration; import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import io.codelaser.maddi.cst.api.element.SourceSet; -import org.junit.jupiter.api.Test; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Proxy; -import java.net.URI; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; /** * Analysis hints (AAPI) must be loaded only for the modules present on the classpath. With java.desktop and diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/CommonKotlinTest.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/CommonKotlinTest.java index 253ea246b..77dd9bf46 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/CommonKotlinTest.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/CommonKotlinTest.java @@ -1,5 +1,19 @@ package io.codelaser.maddi.modification.prepwork.kotlin; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Comparator; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.jupiter.api.BeforeAll; + import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -17,19 +31,6 @@ import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import org.junit.jupiter.api.BeforeAll; - -import java.io.IOException; -import java.io.UncheckedIOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Comparator; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static org.junit.jupiter.api.Assertions.assertEquals; /* Prep on KOTLIN input, from inside prepwork. Every fixture is a pair: a Kotlin class `k.X` and the Java class `j.X` diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinAssignments.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinAssignments.java index 090ac257c..401570314 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinAssignments.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinAssignments.java @@ -1,11 +1,11 @@ package io.codelaser.maddi.modification.prepwork.kotlin; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; - /* Assignments and reads through the conditional constructs: if/else (statement and value), when (statement, value, subject-less), and the null-handling operators K2 lowers to a conditional (elvis, safe call, `!!`). Each Kotlin diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinEscapes.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinEscapes.java index 665f9d261..cd75abfc3 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinEscapes.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinEscapes.java @@ -1,14 +1,15 @@ package io.codelaser.maddi.modification.prepwork.kotlin; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.modification.prepwork.escape.ComputeAlwaysEscapes; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.stream.Collectors; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import java.util.stream.Collectors; - -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.modification.prepwork.escape.ComputeAlwaysEscapes; /* Statements that always escape, and the assignments of the return variable along the escaping paths. Kotlin's diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinLambdas.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinLambdas.java index 02797d28b..9910266b1 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinLambdas.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinLambdas.java @@ -1,18 +1,19 @@ package io.codelaser.maddi.modification.prepwork.kotlin; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.ArrayList; +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.Lambda; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; /* Lambdas: a Kotlin lambda is a Function1 whose body prep analyses as its own method, with the enclosing method's diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinLoops.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinLoops.java index aec77640e..44d74a201 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinLoops.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinLoops.java @@ -1,11 +1,11 @@ package io.codelaser.maddi.modification.prepwork.kotlin; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; - /* Loops: for-in over a collection and over a range, while, do-while, break and continue, and labeled jumps out of a nested loop. The loop's own evaluation reads (`-E`, `;E`, `:E`) and the merges after the loop must be the Java diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinTry.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinTry.java index 6a0e47228..3207bd96b 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinTry.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinTry.java @@ -1,12 +1,13 @@ package io.codelaser.maddi.modification.prepwork.kotlin; -import io.codelaser.maddi.cst.api.statement.Block; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.statement.Block; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /* try/catch/finally, a try used as a value, and the other Kotlin expressions K2 lowers into a declaration followed diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinTypeLevel.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinTypeLevel.java index 135e298dc..4d7e6c511 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinTypeLevel.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/TestKotlinTypeLevel.java @@ -1,21 +1,22 @@ package io.codelaser.maddi.modification.prepwork.kotlin; +import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.PART_OF_CONSTRUCTION; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.stream.Collectors; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; +import io.codelaser.maddi.callgraph.ComputeCallGraph; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.graph.G; -import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; -import io.codelaser.maddi.callgraph.ComputeCallGraph; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -import java.util.stream.Collectors; - -import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.PART_OF_CONSTRUCTION; -import static org.junit.jupiter.api.Assertions.assertEquals; /* The type-level half of prep on Kotlin declarations: the call graph and analysis order, part of construction and diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/objectcreation/TestTrack1.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/objectcreation/TestTrack1.java index ed2b865f0..32cade9b7 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/objectcreation/TestTrack1.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/objectcreation/TestTrack1.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.modification.prepwork.objectcreation; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.inspection.api.integration.JavaInspector; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.VariableData; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestTrack1 extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestApplyGetSetTranslation.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestApplyGetSetTranslation.java index c6ffeaf2f..44d11dc14 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestApplyGetSetTranslation.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestApplyGetSetTranslation.java @@ -17,18 +17,19 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.common.getset.ApplyGetSetTranslation; -import io.codelaser.maddi.cst.api.expression.Expression; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.expression.Expression; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; +import io.codelaser.maddi.modification.common.getset.ApplyGetSetTranslation; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; public class TestApplyGetSetTranslation extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignments.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignments.java index 427c986ce..5f434dc98 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignments.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignments.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.Assignments; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.IfElseStatement; -import io.codelaser.maddi.cst.api.statement.Statement; +import static org.junit.jupiter.api.Assertions.*; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.IfElseStatement; +import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.Assignments; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestAssignments extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsConstructor.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsConstructor.java index 9865375cf..c5609554c 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsConstructor.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsConstructor.java @@ -17,16 +17,17 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** Constructor bodies: this(...)/super(...) argument reads and field assignments — none previously covered. */ public class TestAssignmentsConstructor extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsDependentVariable.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsDependentVariable.java index 76998c91e..7567e3c59 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsDependentVariable.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsDependentVariable.java @@ -17,16 +17,17 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestAssignmentsDependentVariable extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsDoWhile.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsDoWhile.java index 91abf15d2..79ad333e2 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsDoWhile.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsDoWhile.java @@ -17,16 +17,17 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** * do-while: the condition is evaluated after the body, so its reads carry the {@code :E} (EVAL_UPDATE) stage, and diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsEmpty.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsEmpty.java index 4e102fdd7..83413fd24 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsEmpty.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsEmpty.java @@ -17,17 +17,18 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.Statement; +import static org.junit.jupiter.api.Assertions.*; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestAssignmentsEmpty extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsExpression.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsExpression.java index 9f1e02164..3d3b8678e 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsExpression.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsExpression.java @@ -17,20 +17,19 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.IfElseStatement; -import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; -import io.codelaser.maddi.cst.api.statement.Statement; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.IfElseStatement; +import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestAssignmentsExpression extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsExpressionForms.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsExpressionForms.java index a186a22fc..e09db84c1 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsExpressionForms.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsExpressionForms.java @@ -17,16 +17,17 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** Expression forms that are classic index/merge bug sources: ternary, chained assignment, side-effecting array indices. */ public class TestAssignmentsExpressionForms extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsFieldAccess.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsFieldAccess.java index 812b48377..4849f2e81 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsFieldAccess.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsFieldAccess.java @@ -17,16 +17,17 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** * Field and array references (the existing suite is almost entirely local/parameter centric): a compound diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsForEachIf.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsForEachIf.java index 5899f93b9..c822aeee7 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsForEachIf.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsForEachIf.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static org.junit.jupiter.api.Assertions.*; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.statement.IfElseStatement; import io.codelaser.maddi.cst.api.statement.Statement; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestAssignmentsForEachIf extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsInConditions.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsInConditions.java index b17e3c464..c2b126591 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsInConditions.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsInConditions.java @@ -17,16 +17,17 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** * Assignment used as a side effect inside a condition: the assignment index falls on the condition's evaluation diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsInstanceOf.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsInstanceOf.java index 6a7a54ed8..a3faf6322 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsInstanceOf.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsInstanceOf.java @@ -17,19 +17,19 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.IfElseStatement; -import io.codelaser.maddi.cst.api.statement.Statement; -import io.codelaser.maddi.cst.api.statement.WhileStatement; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.IfElseStatement; +import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestAssignmentsInstanceOf extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsInstanceOfFlow.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsInstanceOfFlow.java index 3fdd4c373..cff07d9d3 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsInstanceOfFlow.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsInstanceOfFlow.java @@ -17,18 +17,18 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.IfElseStatement; -import io.codelaser.maddi.cst.api.statement.Statement; +import static org.junit.jupiter.api.Assertions.*; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.IfElseStatement; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** * instanceof-pattern flow scoping beyond the cases already covered by {@code TestAssignmentsInstanceOf}: the diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsLabeledBreak.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsLabeledBreak.java index 3447971e4..cdb70ec0e 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsLabeledBreak.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsLabeledBreak.java @@ -17,17 +17,18 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** * Labeled {@code break}/{@code continue} (none of which were covered) and a plain {@code continue}. The diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsNoExit.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsNoExit.java index 9780b032f..e2d0a52f7 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsNoExit.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsNoExit.java @@ -17,16 +17,17 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.*; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestAssignmentsNoExit extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsReturn.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsReturn.java index 95ef6d9ce..659b2b3f9 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsReturn.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsReturn.java @@ -17,17 +17,18 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestAssignmentsReturn extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsReuse.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsReuse.java index 8edfeb2c0..5def624b1 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsReuse.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsReuse.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; -import io.codelaser.maddi.cst.api.statement.Statement; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; +import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestAssignmentsReuse extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsSwitch.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsSwitch.java index 37ff8a926..c0749c6c2 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsSwitch.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsSwitch.java @@ -17,17 +17,18 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.*; +import static org.junit.jupiter.api.Assertions.*; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.*; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestAssignmentsSwitch extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsSwitchNewStyle.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsSwitchNewStyle.java index 83eecfcb7..15fa5f2dd 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsSwitchNewStyle.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsSwitchNewStyle.java @@ -17,17 +17,18 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** * New-style (arrow) switch statement and pattern switch: assignment in every arm (including default) produces a diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsSwitchNullGuard.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsSwitchNullGuard.java index c7eeae51a..04b615a9f 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsSwitchNullGuard.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsSwitchNullGuard.java @@ -17,16 +17,17 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** * {@code case null} and guarded ({@code when}) patterns. Note these use block-bodied or expression arms in an diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsSwitchOldStyle.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsSwitchOldStyle.java index 39c263b64..81be74d68 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsSwitchOldStyle.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsSwitchOldStyle.java @@ -17,16 +17,17 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.*; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** * Old-style switch, focused on reads/assignments: fall-through that reads a previous case's assignment, a switch diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsSyncAssert.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsSyncAssert.java index 9739cf6c6..eda0738a6 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsSyncAssert.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsSyncAssert.java @@ -17,16 +17,17 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** synchronized (lock evaluated, body merged) and assert (condition and message both read). */ public class TestAssignmentsSyncAssert extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsTry.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsTry.java index 9aa0abbb6..ffee82058 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsTry.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsTry.java @@ -17,24 +17,25 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.Assignments; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.io.StringWriter; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.statement.IfElseStatement; import io.codelaser.maddi.cst.api.statement.ReturnStatement; import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.api.statement.TryStatement; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.io.StringWriter; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.Assignments; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestAssignmentsTry extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsTryFinally.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsTryFinally.java index ee2aad88d..593557b63 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsTryFinally.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestAssignmentsTryFinally.java @@ -17,17 +17,18 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** try/finally with a return crossing the finally, and a multi-catch ({@code A | B}) union catch variable. */ public class TestAssignmentsTryFinally extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestCast.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestCast.java index 8389b5408..1cb33b3a4 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestCast.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestCast.java @@ -17,22 +17,23 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.Statement; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import java.util.List; import java.util.stream.Collectors; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestCast extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestCastArray.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestCastArray.java index 688bde2de..97321b1d4 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestCastArray.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestCastArray.java @@ -17,9 +17,12 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static org.junit.jupiter.api.Assertions.*; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.Assignment; import io.codelaser.maddi.cst.api.expression.Cast; import io.codelaser.maddi.cst.api.expression.EnclosedExpression; @@ -29,11 +32,9 @@ import io.codelaser.maddi.cst.api.statement.ExpressionAsStatement; import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.api.variable.DependentVariable; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestCastArray extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestDoNotRecurseIntoAnonymous.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestDoNotRecurseIntoAnonymous.java index 8e4d53211..9bf554b13 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestDoNotRecurseIntoAnonymous.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestDoNotRecurseIntoAnonymous.java @@ -1,17 +1,18 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; // the 'doNotRecurseIntoAnonymous' option skips analysis of lambda/anonymous-class bodies. The enclosing method // must still analyze without crashing: copyReadsFromAnonymousMethod used to dereference the (now absent) diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestGetSet.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestGetSet.java index c6970ddfd..24ccc36b4 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestGetSet.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestGetSet.java @@ -17,9 +17,13 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static org.junit.jupiter.api.Assertions.*; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Assumptions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -27,12 +31,9 @@ import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.api.variable.DependentVariable; import io.codelaser.maddi.cst.api.variable.Variable; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Assumptions; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestGetSet extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestGetSet2.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestGetSet2.java index f2a6de4d5..e07ae4188 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestGetSet2.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestGetSet2.java @@ -17,9 +17,12 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.common.getset.ApplyGetSetTranslation; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import static org.junit.jupiter.api.Assertions.*; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.expression.BinaryOperator; import io.codelaser.maddi.cst.api.expression.Expression; @@ -31,11 +34,9 @@ import io.codelaser.maddi.cst.api.variable.DependentVariable; import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.common.getset.ApplyGetSetTranslation; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; public class TestGetSet2 extends CommonTest { @Language("java") diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestGetSetGuardTolerance.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestGetSetGuardTolerance.java index 1b2db9808..371294685 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestGetSetGuardTolerance.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestGetSetGuardTolerance.java @@ -17,16 +17,17 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.cst.api.info.FieldInfo; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.*; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.info.FieldInfo; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; /** * {@link io.codelaser.maddi.modification.common.getset.GetSetHelper} leading-guard tolerance: a getter/setter diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestHasBeenDefinedLocals.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestHasBeenDefinedLocals.java index c1fb08834..e41ad1816 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestHasBeenDefinedLocals.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestHasBeenDefinedLocals.java @@ -17,16 +17,17 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.*; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** * Definite-assignment of local variables via {@link VariableInfo#hasBeenDefined(String)}. The existing diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestInstanceOfPatternVariables.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestInstanceOfPatternVariables.java index b1bcb60aa..53a13392b 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestInstanceOfPatternVariables.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestInstanceOfPatternVariables.java @@ -17,18 +17,19 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.IfElseStatement; -import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; +import static org.junit.jupiter.api.Assertions.*; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.IfElseStatement; +import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestInstanceOfPatternVariables extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestLabeledContinue.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestLabeledContinue.java index e42d1b2ae..037e01e22 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestLabeledContinue.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestLabeledContinue.java @@ -17,18 +17,19 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.LoopStatement; -import io.codelaser.maddi.cst.api.statement.Statement; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.LoopStatement; +import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** * An infinite loop ({@code while(true)} / {@code for(;;)}) with no break "never exits normally", so a variable diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestLambda.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestLambda.java index af4d43b2f..2eabb2ddd 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestLambda.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestLambda.java @@ -17,28 +17,25 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.MethodAnalyzer; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.expression.Assignment; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.ConstructorCall; import io.codelaser.maddi.cst.api.expression.Lambda; import io.codelaser.maddi.cst.api.expression.MethodCall; -import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.ExpressionAsStatement; import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; import io.codelaser.maddi.cst.api.statement.Statement; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.stream.Collectors; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.MethodAnalyzer; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestLambda extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestLocalType.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestLocalType.java index ba4b1ed2f..82fd721cb 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestLocalType.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestLocalType.java @@ -17,16 +17,17 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.LocalTypeDeclaration; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.LocalTypeDeclaration; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestLocalType extends CommonTest { @Language("java") diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestMergeLocalVariables.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestMergeLocalVariables.java index 4855809d7..9198c7b6f 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestMergeLocalVariables.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestMergeLocalVariables.java @@ -17,15 +17,16 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; + public class TestMergeLocalVariables extends CommonTest { @Language("java") diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestReads.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestReads.java index 90cef9b13..dc477cb32 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestReads.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestReads.java @@ -17,9 +17,12 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.ConstructorCall; import io.codelaser.maddi.cst.api.expression.Lambda; import io.codelaser.maddi.cst.api.expression.MethodCall; @@ -29,11 +32,9 @@ import io.codelaser.maddi.cst.api.statement.IfElseStatement; import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.api.statement.WhileStatement; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestReads extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestReassignment.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestReassignment.java index 5f489629e..8a5c4de5c 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestReassignment.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestReassignment.java @@ -17,19 +17,18 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; -import io.codelaser.maddi.cst.api.statement.Statement; +import static org.junit.jupiter.api.Assertions.assertEquals; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestReassignment extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestRecord.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestRecord.java index ccb9a8676..f8edf304d 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestRecord.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestRecord.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.ExplicitConstructorInvocation; -import io.codelaser.maddi.cst.api.statement.Statement; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.ExplicitConstructorInvocation; +import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestRecord extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestShadowedCapturedVariable.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestShadowedCapturedVariable.java index 38f26a7da..7c065bc9b 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestShadowedCapturedVariable.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestShadowedCapturedVariable.java @@ -17,9 +17,20 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotSame; +import static org.junit.jupiter.api.Assertions.assertSame; + +import java.io.IOException; +import java.net.URISyntaxException; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.ConstructorCall; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -29,19 +40,9 @@ import io.codelaser.maddi.cst.api.statement.ReturnStatement; import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.api.variable.LocalVariable; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.net.URISyntaxException; - -import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotSame; -import static org.junit.jupiter.api.Assertions.assertSame; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** * Regression (originally surfaced by Jenkins' {@code hudson.Launcher.decorateByEnv}): an anonymous class captures diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestSwitchExpression.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestSwitchExpression.java index ad0afb130..e9358d368 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestSwitchExpression.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestSwitchExpression.java @@ -17,18 +17,19 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static org.junit.jupiter.api.Assertions.*; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.SwitchExpression; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.statement.Block; import io.codelaser.maddi.cst.api.statement.Statement; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestSwitchExpression extends CommonTest { @Language("java") diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestSwitchExpressionLocals.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestSwitchExpressionLocals.java index 35d1b8a4f..4a3e39f49 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestSwitchExpressionLocals.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestSwitchExpressionLocals.java @@ -17,6 +17,14 @@ package io.codelaser.maddi.modification.prepwork.variable; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Comparator; +import java.util.stream.Collectors; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.variable.FieldReference; @@ -24,14 +32,6 @@ import io.codelaser.maddi.modification.prepwork.CommonTest; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import java.util.Comparator; -import java.util.stream.Collectors; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * CodeLaser/maddi#74: a local assigned or read inside a switch EXPRESSION's arms is assigned or read in the statement that holds diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestSwitchLabeledBreak.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestSwitchLabeledBreak.java index 687d5a62f..c1e92944f 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestSwitchLabeledBreak.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestSwitchLabeledBreak.java @@ -17,22 +17,23 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.BreakStatement; -import io.codelaser.maddi.cst.api.statement.Statement; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.ArrayList; import java.util.List; import java.util.TreeMap; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.BreakStatement; +import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** * An old-style switch creates a synthetic boolean break variable {@code bv-}; a {@code break} diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestSwitchNoDefaultMerge.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestSwitchNoDefaultMerge.java index 269e35373..9bc6d5835 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestSwitchNoDefaultMerge.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestSwitchNoDefaultMerge.java @@ -17,17 +17,18 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** * New-style (arrow) switch completeness must be exhaustiveness-aware. A variable assigned in every arm is diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestVariableData.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestVariableData.java index d8082d271..de20a47b5 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestVariableData.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestVariableData.java @@ -17,10 +17,14 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.ReturnVariableImpl; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -32,13 +36,10 @@ import io.codelaser.maddi.cst.api.translate.TranslationMap; import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.ReturnVariableImpl; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestVariableData extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestVariableDataArrays.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestVariableDataArrays.java index 9fb4990b7..d2bcca561 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestVariableDataArrays.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestVariableDataArrays.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.DoStatement; -import io.codelaser.maddi.cst.api.statement.Statement; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.DoStatement; +import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; public class TestVariableDataArrays extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestVariableDataFlatten.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestVariableDataFlatten.java index abdfc3889..cda1ebde7 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestVariableDataFlatten.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestVariableDataFlatten.java @@ -17,17 +17,18 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.Statement; +import static org.junit.jupiter.api.Assertions.*; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** * Phase 1 of the flatten-snapshot design ({@code DESIGN-vardata-flatten.md}): the flatten primitive diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestVariableDataOrder.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestVariableDataOrder.java index 1ab2350fe..e58b508eb 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestVariableDataOrder.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestVariableDataOrder.java @@ -1,17 +1,18 @@ package io.codelaser.maddi.modification.prepwork.variable; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.modification.prepwork.CommonTest; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; /* The order of VariableData.variableInfoStream() is a function of the source, not of the JVM (CodeLaser/maddi-mod#4). diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestVariableDataRegeneration.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestVariableDataRegeneration.java index 1942c5cf8..b3ff46a1e 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestVariableDataRegeneration.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestVariableDataRegeneration.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.modification.prepwork.variable; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.api.statement.Statement; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** * Phase 0 (GO/NO-GO) for the VariableData flatten-snapshot design diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/impl/TestAssignments.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/impl/TestAssignments.java index 4736d9fc5..8a21ecc68 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/impl/TestAssignments.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/impl/TestAssignments.java @@ -17,11 +17,11 @@ package io.codelaser.maddi.modification.prepwork.variable.impl; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; import java.util.Map; -import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; public class TestAssignments { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/impl/TestAssignmentsLambda.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/impl/TestAssignmentsLambda.java index 8870f5c06..ca0b13ffa 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/impl/TestAssignmentsLambda.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/impl/TestAssignmentsLambda.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.modification.prepwork.variable.impl; -import io.codelaser.maddi.modification.prepwork.CommonTest; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.modification.prepwork.variable.VariableData; -import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; +import static org.junit.jupiter.api.Assertions.*; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + import io.codelaser.maddi.cst.api.expression.Lambda; import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.statement.Statement; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.variable.VariableData; +import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; public class TestAssignmentsLambda extends CommonTest { diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/impl/TestReads.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/impl/TestReads.java index 509c7a100..cb5bf0062 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/impl/TestReads.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/impl/TestReads.java @@ -17,12 +17,12 @@ package io.codelaser.maddi.modification.prepwork.variable.impl; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.List; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.Test; public class TestReads { diff --git a/maddi-run-analysis/src/main/java/io/codelaser/maddi/run/analysis/AnalysisEngineImpl.java b/maddi-run-analysis/src/main/java/io/codelaser/maddi/run/analysis/AnalysisEngineImpl.java index 15f8b8add..beab0d74b 100644 --- a/maddi-run-analysis/src/main/java/io/codelaser/maddi/run/analysis/AnalysisEngineImpl.java +++ b/maddi-run-analysis/src/main/java/io/codelaser/maddi/run/analysis/AnalysisEngineImpl.java @@ -17,6 +17,22 @@ package io.codelaser.maddi.run.analysis; +import java.io.File; +import java.io.IOException; +import java.util.Collection; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Predicate; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.codelaser.maddi.aapi.parser.AnalysisHints; import io.codelaser.maddi.aapi.parser.AnalysisHintsCompiler; import io.codelaser.maddi.aapi.parser.AnalysisHintsComposer; @@ -40,12 +56,15 @@ import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.output.Qualification; import io.codelaser.maddi.cst.api.runtime.Runtime; +import io.codelaser.maddi.cst.impl.analysis.ConsumptionEdgeRecorder; +import io.codelaser.maddi.cst.impl.analysis.LinkFacts; +import io.codelaser.maddi.cst.impl.analysis.NullabilityFacts; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.inspection.api.integration.JavaInspectorFactory; import io.codelaser.maddi.modification.analyzer.CheckpointWriter; import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.analyzer.impl.EventualCluster; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.analyzer.impl.StaticSideEffectAnalyzerImpl; import io.codelaser.maddi.modification.analyzer.nullability.NullabilityPass; import io.codelaser.maddi.modification.analyzer.nullability.Policy; @@ -61,25 +80,7 @@ import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; import io.codelaser.maddi.modification.prepwork.io.PrepWorkCodec; import io.codelaser.maddi.modification.prepwork.io.WriteAnalysisResults; -import io.codelaser.maddi.cst.impl.analysis.ConsumptionEdgeRecorder; -import io.codelaser.maddi.cst.impl.analysis.LinkFacts; -import io.codelaser.maddi.cst.impl.analysis.NullabilityFacts; import io.codelaser.maddi.util.Trie; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.File; -import java.io.IOException; -import java.util.Collection; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.function.Consumer; -import java.util.function.Function; -import java.util.function.Predicate; /** * The implementation of {@link AnalysisEngine}, registered for {@link java.util.ServiceLoader} both in diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/main/TestRunAnalyzer.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/main/TestRunAnalyzer.java index 95d630b03..0c8812717 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/main/TestRunAnalyzer.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/main/TestRunAnalyzer.java @@ -17,20 +17,21 @@ package io.codelaser.maddi.run.main; -import ch.qos.logback.classic.Level; -import io.codelaser.maddi.inspection.integration.ToolChain; -import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; + import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; - -import static org.junit.jupiter.api.Assertions.*; +import ch.qos.logback.classic.Level; +import io.codelaser.maddi.inspection.integration.ToolChain; +import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; public class TestRunAnalyzer { private static final Logger LOGGER = LoggerFactory.getLogger(TestRunAnalyzer.class); diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/main/TestRunComposer.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/main/TestRunComposer.java index c66fb6066..eee3ab09f 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/main/TestRunComposer.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/main/TestRunComposer.java @@ -17,17 +17,18 @@ package io.codelaser.maddi.run.main; -import ch.qos.logback.classic.Level; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.File; + import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.File; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import ch.qos.logback.classic.Level; public class TestRunComposer { private static final Logger LOGGER = LoggerFactory.getLogger(TestRunComposer.class); diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/main/TestRunShallowAnalyzer.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/main/TestRunShallowAnalyzer.java index 295f21eae..a9780217b 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/main/TestRunShallowAnalyzer.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/main/TestRunShallowAnalyzer.java @@ -17,22 +17,21 @@ package io.codelaser.maddi.run.main; -import ch.qos.logback.classic.Level; -import io.codelaser.maddi.inspection.integration.ToolChain; -import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.File; +import java.util.Arrays; + import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.File; -import java.io.IOException; -import java.util.Arrays; -import java.util.Objects; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import ch.qos.logback.classic.Level; +import io.codelaser.maddi.inspection.integration.ToolChain; +import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; public class TestRunShallowAnalyzer { private static final Logger LOGGER = LoggerFactory.getLogger(TestRunShallowAnalyzer.class); diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/CorpusNullability.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/CorpusNullability.java index 1395a7844..959559cc5 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/CorpusNullability.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/CorpusNullability.java @@ -1,5 +1,10 @@ package io.codelaser.maddi.run.openjdkmain; +import java.io.IOException; +import java.util.Collection; +import java.util.List; +import java.util.Set; + import io.codelaser.maddi.analysis.api.PrepOutcome; import io.codelaser.maddi.analysis.api.PrepRequest; import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; @@ -18,11 +23,6 @@ import io.codelaser.maddi.run.analysis.AnalysisEngineImpl; import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; -import java.io.IOException; -import java.util.Collection; -import java.util.List; -import java.util.Set; - /** * The translation ratchets with nullability: a corpus analysed by the modification analysis with its NullabilityPass, * and the pass's report as the printers ask for it ({@link NullabilityFacts}). Shared by the Kotlin and the C# diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/GenerateSupportAnalysisResults.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/GenerateSupportAnalysisResults.java index 117d9d521..61d1f9df5 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/GenerateSupportAnalysisResults.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/GenerateSupportAnalysisResults.java @@ -1,21 +1,22 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.run.config.AnalysisHintsConfigurationImpl; -import io.codelaser.maddi.run.config.Configuration; -import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.inspection.api.resource.InputConfiguration; -import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.net.URI; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import io.codelaser.maddi.cst.api.element.SourceSet; +import io.codelaser.maddi.inspection.api.resource.InputConfiguration; +import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.codelaser.maddi.run.config.AnalysisHintsConfigurationImpl; +import io.codelaser.maddi.run.config.Configuration; /** * Manual generator (use case 2 of the AnalysisHints configuration): compiles the curated diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestActiveMQBroker.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestActiveMQBroker.java index 70c5856f5..7edce143f 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestActiveMQBroker.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestActiveMQBroker.java @@ -1,18 +1,19 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.util.corpus.Corpora; -import ch.qos.logback.classic.Level; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.nio.file.Path; + import org.apache.commons.cli.ParseException; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; -import java.nio.file.Path; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Tag; +import ch.qos.logback.classic.Level; +import io.codelaser.maddi.util.corpus.Corpora; /** * ActiveMQ broker (concurrency-heavy corpus: destinations, cursors, thread pools; qualified inner-class diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestAnalysisEarlyCutoffPrototype.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestAnalysisEarlyCutoffPrototype.java index dcbc17882..c52b1aeb9 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestAnalysisEarlyCutoffPrototype.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestAnalysisEarlyCutoffPrototype.java @@ -17,40 +17,40 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import static io.codelaser.maddi.inspection.api.integration.JavaInspector.InvalidationState.*; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.callgraph.ComputeCallGraph; -import io.codelaser.maddi.modification.prepwork.callgraph.EarlyCutoffWorklist; import io.codelaser.maddi.callgraph.PrimaryTypeUseGraph; -import io.codelaser.maddi.modification.prepwork.io.AnalysisFingerprint; -import io.codelaser.maddi.graph.G; -import io.codelaser.maddi.graph.V; import io.codelaser.maddi.cst.api.element.FingerPrint; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.graph.G; +import io.codelaser.maddi.graph.V; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.inspection.api.parser.ParseResult; import io.codelaser.maddi.inspection.api.resource.InputConfiguration; import io.codelaser.maddi.inspection.openjdk.JavaInspectorImpl; import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Set; -import java.util.TreeMap; -import java.util.TreeSet; - -import static io.codelaser.maddi.inspection.api.integration.JavaInspector.InvalidationState.*; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.callgraph.EarlyCutoffWorklist; +import io.codelaser.maddi.modification.prepwork.io.AnalysisFingerprint; /** * Prototype of the early-cutoff compare half (docs/design/analysis-rewiring.md). We analyse a tiny project, snapshot the diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestAnalysisHintsCompilation.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestAnalysisHintsCompilation.java index d45449bb6..3803fa8d0 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestAnalysisHintsCompilation.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestAnalysisHintsCompilation.java @@ -1,21 +1,22 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.run.config.AnalysisHintsConfigurationImpl; -import io.codelaser.maddi.run.config.Configuration; -import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.inspection.api.resource.InputConfiguration; -import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.net.URI; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import io.codelaser.maddi.cst.api.element.SourceSet; +import io.codelaser.maddi.inspection.api.resource.InputConfiguration; +import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.codelaser.maddi.run.config.AnalysisHintsConfigurationImpl; +import io.codelaser.maddi.run.config.Configuration; public class TestAnalysisHintsCompilation { diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestCompileLogCliPrep.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestCompileLogCliPrep.java index 4ac7dcd3c..5f6eb760b 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestCompileLogCliPrep.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestCompileLogCliPrep.java @@ -17,25 +17,18 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.run.config.util.JsonStreaming; -import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.inspection.api.resource.InputConfiguration; -import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; +import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assumptions.assumeTrue; import java.io.File; -import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.Arrays; import java.util.List; -import java.util.Map; -import java.util.TreeMap; import java.util.stream.Collectors; -import static org.junit.jupiter.api.Assertions.*; -import static org.junit.jupiter.api.Assumptions.assumeTrue; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; /** * Exercises the three CLI options that obtain an input configuration from a build/javac log: diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestCorpusSweep.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestCorpusSweep.java index 18ce90519..4f913fc7b 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestCorpusSweep.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestCorpusSweep.java @@ -1,19 +1,20 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.util.corpus.Corpora; -import ch.qos.logback.classic.Level; -import org.junit.jupiter.api.Assumptions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; + +import org.junit.jupiter.api.Assumptions; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import ch.qos.logback.classic.Level; +import io.codelaser.maddi.util.corpus.Corpora; /** * Batch first-contact sweep over every corpus under the test-oss root (see {@link io.codelaser.maddi.util.corpus.Corpora}) that diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestDollarNamedType.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestDollarNamedType.java index faf37c152..aa80e6709 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestDollarNamedType.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestDollarNamedType.java @@ -17,13 +17,13 @@ package io.codelaser.maddi.run.openjdkmain; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.nio.file.Files; import java.nio.file.Path; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; /** * A type whose simple name ends in {@code $} is not, by that fact alone, an analysis-hints shadow. diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestEarlyCutoffSkip.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestEarlyCutoffSkip.java index aff299ab3..c1bbfe3af 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestEarlyCutoffSkip.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestEarlyCutoffSkip.java @@ -17,18 +17,34 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import static io.codelaser.maddi.inspection.api.integration.JavaInspector.InvalidationState.*; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Predicate; + +import javax.tools.JavaCompiler; +import javax.tools.JavaFileObject; +import javax.tools.StandardJavaFileManager; +import javax.tools.StandardLocation; +import javax.tools.ToolProvider; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.callgraph.ComputeCallGraph; -import io.codelaser.maddi.modification.prepwork.io.AnalysisFingerprint; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.InfoMapView; -import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; @@ -39,26 +55,10 @@ import io.codelaser.maddi.inspection.openjdk.JavaInspectorImpl; import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; - -import javax.tools.JavaCompiler; -import javax.tools.JavaFileObject; -import javax.tools.StandardJavaFileManager; -import javax.tools.StandardLocation; -import javax.tools.ToolProvider; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.function.Predicate; - -import static io.codelaser.maddi.inspection.api.integration.JavaInspector.InvalidationState.*; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.io.AnalysisFingerprint; /** * The early-cutoff skip, running end to end and saving work. Two source sets: {@code User} (dependent) uses diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestEarlyCutoffWorklistDriver.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestEarlyCutoffWorklistDriver.java index f60313215..d762c243b 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestEarlyCutoffWorklistDriver.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestEarlyCutoffWorklistDriver.java @@ -17,14 +17,35 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import static io.codelaser.maddi.inspection.api.integration.JavaInspector.InvalidationState.*; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +import javax.tools.JavaCompiler; +import javax.tools.JavaFileObject; +import javax.tools.StandardJavaFileManager; +import javax.tools.StandardLocation; +import javax.tools.ToolProvider; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.callgraph.ComputeCallGraph; -import io.codelaser.maddi.modification.prepwork.callgraph.EarlyCutoffWorklist; import io.codelaser.maddi.callgraph.PrimaryTypeUseGraph; -import io.codelaser.maddi.modification.prepwork.io.AnalysisFingerprint; import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.element.FingerPrint; import io.codelaser.maddi.cst.api.info.FieldInfo; @@ -41,30 +62,11 @@ import io.codelaser.maddi.inspection.openjdk.JavaInspectorImpl; import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; - -import javax.tools.JavaCompiler; -import javax.tools.JavaFileObject; -import javax.tools.StandardJavaFileManager; -import javax.tools.StandardLocation; -import javax.tools.ToolProvider; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; -import java.util.TreeSet; -import java.util.function.Function; -import java.util.function.Predicate; -import java.util.stream.Collectors; - -import static io.codelaser.maddi.inspection.api.integration.JavaInspector.InvalidationState.*; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.callgraph.EarlyCutoffWorklist; +import io.codelaser.maddi.modification.prepwork.io.AnalysisFingerprint; /** * The early-cutoff capstone: the {@link EarlyCutoffWorklist} driving the real per-type recompute (prep + diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestElasticsearchServer.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestElasticsearchServer.java index ebd16d954..fb86bf69b 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestElasticsearchServer.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestElasticsearchServer.java @@ -1,11 +1,13 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.util.corpus.Corpora; -import ch.qos.logback.classic.Level; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; + import org.apache.commons.cli.ParseException; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Tag; @@ -14,13 +16,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; -import static org.junit.jupiter.api.Assertions.assertTrue; +import ch.qos.logback.classic.Level; +import io.codelaser.maddi.util.corpus.Corpora; /** * The elasticsearch server sources: the large-method stress corpus (the work ceiling's diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestErrorReportingPrep.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestErrorReportingPrep.java index 4361d2d48..57808c3ce 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestErrorReportingPrep.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestErrorReportingPrep.java @@ -17,14 +17,13 @@ package io.codelaser.maddi.run.openjdkmain; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; +import static org.junit.jupiter.api.Assertions.assertNotEquals; import java.nio.file.Files; import java.nio.file.Path; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotEquals; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; /** * Guards the error-reporting fix: a source file that fails to parse must be surfaced (openjdk diagnostics now flow diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestFernflower.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestFernflower.java index cc1d5682e..eae2aa2e0 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestFernflower.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestFernflower.java @@ -1,17 +1,18 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.util.corpus.Corpora; -import ch.qos.logback.classic.Level; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; + import org.apache.commons.cli.ParseException; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Tag; +import ch.qos.logback.classic.Level; +import io.codelaser.maddi.util.corpus.Corpora; /** * The SMALL corpus (~500 source files vs timefold's ~3,500 types): fast full-chain feedback for engine diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestFernflowerNullabilityCauses.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestFernflowerNullabilityCauses.java index 492a0b09a..e7d54db35 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestFernflowerNullabilityCauses.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestFernflowerNullabilityCauses.java @@ -1,5 +1,14 @@ package io.codelaser.maddi.run.openjdkmain; +import java.nio.file.Path; +import java.util.List; +import java.util.Set; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.slf4j.LoggerFactory; + import io.codelaser.maddi.analysis.api.PrepOutcome; import io.codelaser.maddi.analysis.api.PrepRequest; import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; @@ -13,18 +22,10 @@ import io.codelaser.maddi.modification.analyzer.nullability.NullabilityPass; import io.codelaser.maddi.modification.analyzer.nullability.Policy; import io.codelaser.maddi.modification.analyzer.nullability.Report; -import io.codelaser.maddi.modification.analyzer.nullability.World; import io.codelaser.maddi.modification.analyzer.nullability.Switches; +import io.codelaser.maddi.modification.analyzer.nullability.World; import io.codelaser.maddi.run.analysis.AnalysisEngineImpl; import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.slf4j.LoggerFactory; - -import java.nio.file.Path; -import java.util.List; -import java.util.Set; /** * The nullability pass on fernflower, without printing: every nullable verdict (top level and type arguments) with diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestGuava.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestGuava.java index 6dbe6b9c7..5a59f1030 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestGuava.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestGuava.java @@ -1,18 +1,19 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.util.corpus.Corpora; -import ch.qos.logback.classic.Level; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.nio.file.Path; + import org.apache.commons.cli.ParseException; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; -import java.nio.file.Path; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Tag; +import ch.qos.logback.classic.Level; +import io.codelaser.maddi.util.corpus.Corpora; /** * Guava core (~350k lines, 20k elements): the generics/immutability-depth corpus — recursive self-bounded diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestIncrementalConsumptionWake.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestIncrementalConsumptionWake.java index dada869c0..833ed4370 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestIncrementalConsumptionWake.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestIncrementalConsumptionWake.java @@ -17,14 +17,26 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import static io.codelaser.maddi.inspection.api.integration.JavaInspector.InvalidationState.*; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; +import java.util.function.Function; +import java.util.stream.Collectors; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.callgraph.ComputeCallGraph; -import io.codelaser.maddi.modification.prepwork.callgraph.EarlyCutoffWorklist; import io.codelaser.maddi.callgraph.PrimaryTypeUseGraph; -import io.codelaser.maddi.modification.prepwork.io.AnalysisFingerprint; -import io.codelaser.maddi.modification.prepwork.io.IncrementalState; import io.codelaser.maddi.cst.api.element.FingerPrint; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -36,22 +48,11 @@ import io.codelaser.maddi.inspection.openjdk.JavaInspectorImpl; import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; -import java.util.function.Function; -import java.util.stream.Collectors; - -import static io.codelaser.maddi.inspection.api.integration.JavaInspector.InvalidationState.*; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.callgraph.EarlyCutoffWorklist; +import io.codelaser.maddi.modification.prepwork.io.AnalysisFingerprint; +import io.codelaser.maddi.modification.prepwork.io.IncrementalState; /** * Task #35 phase C: the early-cutoff worklist woken by RECORDED consumption edges instead of the diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestIsolateFernflowerGroup.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestIsolateFernflowerGroup.java index 19fa1719f..2c1eaec9c 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestIsolateFernflowerGroup.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestIsolateFernflowerGroup.java @@ -1,20 +1,7 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.modification.common.util.IsolateClass; -import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.slf4j.LoggerFactory; +import static org.junit.jupiter.api.Assertions.assertEquals; -import javax.tools.Diagnostic; -import javax.tools.DiagnosticCollector; -import javax.tools.JavaCompiler; -import javax.tools.JavaFileObject; -import javax.tools.StandardJavaFileManager; -import javax.tools.ToolProvider; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -25,7 +12,22 @@ import java.util.Set; import java.util.stream.Collectors; -import static org.junit.jupiter.api.Assertions.assertEquals; +import javax.tools.Diagnostic; +import javax.tools.DiagnosticCollector; +import javax.tools.JavaCompiler; +import javax.tools.JavaFileObject; +import javax.tools.StandardJavaFileManager; +import javax.tools.ToolProvider; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.modification.common.util.IsolateClass; +import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; /** * CodeLaser/maddi#180: a group isolate out of a real corpus. fernflower's {@code DomHelper} is isolated on its own, diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpFernflowerFacts.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpFernflowerFacts.java index 7e2fb85a2..99b2f6677 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpFernflowerFacts.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpFernflowerFacts.java @@ -1,13 +1,14 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.run.j2cs.JavaToCSharpRatchet; -import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; +import java.nio.file.Path; + import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; -import java.nio.file.Path; +import io.codelaser.maddi.run.j2cs.JavaToCSharpRatchet; +import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; /** * Fernflower printed as C# with the analysis's facts ({@link CorpusNullability}): read-only collection parameters and diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpLangchain4jFacts.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpLangchain4jFacts.java index cfa6b3f2b..613a9ff82 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpLangchain4jFacts.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpLangchain4jFacts.java @@ -1,13 +1,14 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.run.j2cs.JavaToCSharpRatchet; -import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; +import java.nio.file.Path; + import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; -import java.nio.file.Path; +import io.codelaser.maddi.run.j2cs.JavaToCSharpRatchet; +import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; /** * langchain4j-core printed as C# with the analysis's facts ({@link CorpusNullability}), a second corpus beside diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpTimefoldFacts.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpTimefoldFacts.java index 1d0a7d1a5..b36f1407f 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpTimefoldFacts.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpTimefoldFacts.java @@ -1,13 +1,14 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.run.j2cs.JavaToCSharpRatchet; -import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; +import java.nio.file.Path; + import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; -import java.nio.file.Path; +import io.codelaser.maddi.run.j2cs.JavaToCSharpRatchet; +import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; /** * timefold-solver's core printed as C# with the analysis's facts ({@link CorpusNullability}), the third corpus beside diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinAblation.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinAblation.java index 09a077129..bc6557207 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinAblation.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinAblation.java @@ -1,17 +1,17 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.cst.impl.analysis.ModificationFacts; -import io.codelaser.maddi.cst.impl.analysis.NullabilityFacts; -import io.codelaser.maddi.cst.print.kotlin.KotlinPrintOptions; -import io.codelaser.maddi.modification.analyzer.nullability.NullabilityPass; -import io.codelaser.maddi.modification.analyzer.nullability.Report; -import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; +import java.util.Objects; + import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; -import java.util.Objects; +import io.codelaser.maddi.cst.impl.analysis.ModificationFacts; +import io.codelaser.maddi.cst.impl.analysis.NullabilityFacts; +import io.codelaser.maddi.cst.print.kotlin.KotlinPrintOptions; +import io.codelaser.maddi.modification.analyzer.nullability.Report; +import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; /** * The ablation of the Java → Kotlin translation (KotlinConf 2027, maddi-mod#35): one corpus analysed once, as the diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinFernflowerNullability.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinFernflowerNullability.java index 054faf610..4d4a39e6a 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinFernflowerNullability.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinFernflowerNullability.java @@ -1,12 +1,13 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; +import java.nio.file.Path; + import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; -import java.nio.file.Path; +import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; /** * ⛔ THE RATCHET FOR JAVA → KOTLIN TRANSLATION WITH NULLABILITY: maddi's TestJavaToKotlinFernflower (the printer diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinGuavaNullability.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinGuavaNullability.java index 6fefbdc72..b80ca9e0b 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinGuavaNullability.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinGuavaNullability.java @@ -1,12 +1,13 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; +import java.nio.file.Path; + import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; -import java.nio.file.Path; +import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; /** * ⛔ THE RATCHET FOR JAVA → KOTLIN TRANSLATION WITH NULLABILITY, a third corpus: guava printed as Kotlin with the diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinLangchain4jNullability.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinLangchain4jNullability.java index d32bd86fd..01075c612 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinLangchain4jNullability.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinLangchain4jNullability.java @@ -1,12 +1,13 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; +import java.nio.file.Path; + import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; -import java.nio.file.Path; +import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; /** * ⛔ THE RATCHET FOR JAVA → KOTLIN TRANSLATION WITH NULLABILITY, a second corpus: langchain4j-core printed as Kotlin diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinPreconditions.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinPreconditions.java index 40b501400..9b26ef2d0 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinPreconditions.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinPreconditions.java @@ -1,16 +1,17 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.cst.print.kotlin.KotlinPrintOptions; -import io.codelaser.maddi.modification.analyzer.nullability.Policy; -import io.codelaser.maddi.modification.analyzer.nullability.Report; -import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; +import java.util.List; +import java.util.Objects; + import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; -import java.util.List; -import java.util.Objects; +import io.codelaser.maddi.cst.print.kotlin.KotlinPrintOptions; +import io.codelaser.maddi.modification.analyzer.nullability.Policy; +import io.codelaser.maddi.modification.analyzer.nullability.Report; +import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; /** * The Kotlin side of CodeLaser/maddi#125, a measurement for Bart's decision: one corpus analysed once, as the diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJenkinsCore.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJenkinsCore.java index ea53d1a00..b8ba802e9 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJenkinsCore.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJenkinsCore.java @@ -1,18 +1,19 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.util.corpus.Corpora; -import ch.qos.logback.classic.Level; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.nio.file.Path; + import org.apache.commons.cli.ParseException; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; -import java.nio.file.Path; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Tag; +import ch.qos.logback.classic.Level; +import io.codelaser.maddi.util.corpus.Corpora; /** * Jenkins core (enterprise/DI shape: mutable JavaBeans, Descriptor hierarchies, generated localizer diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestKotlinConfReproduce.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestKotlinConfReproduce.java index 9996469bd..5d427c27f 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestKotlinConfReproduce.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestKotlinConfReproduce.java @@ -1,15 +1,16 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.cst.impl.analysis.ModificationFacts; -import io.codelaser.maddi.cst.print.kotlin.KotlinPrintOptions; -import io.codelaser.maddi.modification.analyzer.nullability.Report; -import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; +import java.util.Objects; + import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; -import java.util.Objects; +import io.codelaser.maddi.cst.impl.analysis.ModificationFacts; +import io.codelaser.maddi.cst.print.kotlin.KotlinPrintOptions; +import io.codelaser.maddi.modification.analyzer.nullability.Report; +import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; /** * KotlinConf "numbers reproduce" (maddi-mod#50): the scoreboard's maddi translation, the {@code -both} output of diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestLangchain4j.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestLangchain4j.java index 4e3cd3e04..d80aa693d 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestLangchain4j.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestLangchain4j.java @@ -1,17 +1,18 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.util.corpus.Corpora; -import ch.qos.logback.classic.Level; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; + import org.apache.commons.cli.ParseException; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Tag; +import ch.qos.logback.classic.Level; +import io.codelaser.maddi.util.corpus.Corpora; @Tag("slow") public class TestLangchain4j { diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestLangchain4jCollections.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestLangchain4jCollections.java index 2bbeeb452..e579d82b6 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestLangchain4jCollections.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestLangchain4jCollections.java @@ -1,5 +1,21 @@ package io.codelaser.maddi.run.openjdkmain; +import static org.junit.jupiter.api.Assertions.assertFalse; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.slf4j.LoggerFactory; + import io.codelaser.maddi.analysis.api.PrepOutcome; import io.codelaser.maddi.analysis.api.PrepRequest; import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; @@ -17,21 +33,6 @@ import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.run.analysis.AnalysisEngineImpl; import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.slf4j.LoggerFactory; - -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; - -import static org.junit.jupiter.api.Assertions.assertFalse; /** * The modification analysis on langchain4j-core, without printing: every collection-typed field, parameter and diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestLibraryCallCensus.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestLibraryCallCensus.java index 7207c9e94..7c6b019ba 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestLibraryCallCensus.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestLibraryCallCensus.java @@ -1,19 +1,6 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.cst.api.expression.ConstructorCall; -import io.codelaser.maddi.cst.api.expression.MethodCall; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; -import io.codelaser.maddi.run.analysis.AnalysisEngineImpl; -import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.slf4j.LoggerFactory; +import static org.junit.jupiter.api.Assertions.assertFalse; import java.nio.file.Files; import java.nio.file.Path; @@ -28,7 +15,21 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import static org.junit.jupiter.api.Assertions.assertFalse; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.cst.api.expression.ConstructorCall; +import io.codelaser.maddi.cst.api.expression.MethodCall; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; +import io.codelaser.maddi.run.analysis.AnalysisEngineImpl; +import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; /** * Which library members Java corpora call, and what the analysis reads each call as: the worklist for the diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestNullabilityOracleGuava.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestNullabilityOracleGuava.java index 659d33c13..195557298 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestNullabilityOracleGuava.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestNullabilityOracleGuava.java @@ -1,12 +1,34 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.cst.api.expression.AnnotationExpression; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.UnaryOperator; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.codelaser.maddi.analysis.api.PrepOutcome; import io.codelaser.maddi.analysis.api.PrepRequest; import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; +import io.codelaser.maddi.cst.api.expression.AnnotationExpression; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.type.NullableState; @@ -20,37 +42,15 @@ import io.codelaser.maddi.modification.analyzer.nullability.Arg; import io.codelaser.maddi.modification.analyzer.nullability.Content; import io.codelaser.maddi.modification.analyzer.nullability.NullabilityComparison; +import io.codelaser.maddi.modification.analyzer.nullability.NullabilityComparison.Kind; +import io.codelaser.maddi.modification.analyzer.nullability.NullabilityComparison.Outcome; import io.codelaser.maddi.modification.analyzer.nullability.NullabilityPass; import io.codelaser.maddi.modification.analyzer.nullability.Policy; import io.codelaser.maddi.modification.analyzer.nullability.Report; import io.codelaser.maddi.modification.analyzer.nullability.World; import io.codelaser.maddi.run.analysis.AnalysisEngineImpl; -import io.codelaser.maddi.modification.analyzer.nullability.NullabilityComparison.Kind; -import io.codelaser.maddi.modification.analyzer.nullability.NullabilityComparison.Outcome; import io.codelaser.maddi.run.config.util.JsonStreaming; import io.codelaser.maddi.util.corpus.Corpora; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.function.UnaryOperator; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; /** * The nullability oracle (maddi-mod {@code docs/design/nullability.md} §6, T6), first stage: guava's own JSpecify diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestOutsideReloadCarry.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestOutsideReloadCarry.java index f1dcafe9a..0e6a7017a 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestOutsideReloadCarry.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestOutsideReloadCarry.java @@ -17,19 +17,31 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import static io.codelaser.maddi.inspection.api.integration.JavaInspector.InvalidationState.*; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.tools.JavaCompiler; +import javax.tools.JavaFileObject; +import javax.tools.StandardJavaFileManager; +import javax.tools.StandardLocation; +import javax.tools.ToolProvider; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.callgraph.ComputeCallGraph; -import io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField; import io.codelaser.maddi.callgraph.PrimaryTypeUseGraph; -import io.codelaser.maddi.modification.prepwork.io.AnalysisFingerprint; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.element.FingerPrint; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; @@ -37,31 +49,19 @@ import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.inspection.api.parser.ParseResult; import io.codelaser.maddi.inspection.api.resource.InputConfiguration; import io.codelaser.maddi.inspection.openjdk.JavaInspectorImpl; import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; - -import javax.tools.JavaCompiler; -import javax.tools.JavaFileObject; -import javax.tools.StandardJavaFileManager; -import javax.tools.StandardLocation; -import javax.tools.ToolProvider; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static io.codelaser.maddi.inspection.api.integration.JavaInspector.InvalidationState.*; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField; +import io.codelaser.maddi.modification.prepwork.io.AnalysisFingerprint; /** * The payoff of the exposed {@link InfoMapView}: an outside-reload carry of a spared REWIRE type's analyzer diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestParSeqLinkBench.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestParSeqLinkBench.java index 022b56e44..2a0e00425 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestParSeqLinkBench.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestParSeqLinkBench.java @@ -1,25 +1,26 @@ package io.codelaser.maddi.run.openjdkmain; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Set; + +import org.junit.jupiter.api.Assumptions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import ch.qos.logback.classic.Level; -import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.run.config.javac.ParseJavacList; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.inspection.api.parser.ParseResult; import io.codelaser.maddi.inspection.api.parser.Summary; import io.codelaser.maddi.inspection.api.resource.InputConfiguration; import io.codelaser.maddi.inspection.openjdk.JavaInspectorImpl; -import org.junit.jupiter.api.Assumptions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Set; +import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.run.config.javac.ParseJavacList; /* Faithful linking benchmark on the real io.codelaser...parseq code (deep recursive generic structures that the diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRewireAnonymousType.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRewireAnonymousType.java index 14033feb2..244c95171 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRewireAnonymousType.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRewireAnonymousType.java @@ -17,7 +17,20 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.InfoMap; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -28,19 +41,7 @@ import io.codelaser.maddi.inspection.openjdk.JavaInspectorImpl; import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; /** * Regression for the anonymous-types rewire gap (found 2026-07-23 by the refactor server's Tier 2 reparse). Anonymous and diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRewireFernflower.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRewireFernflower.java index 7cb31cd49..dd0b8cca3 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRewireFernflower.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRewireFernflower.java @@ -17,14 +17,9 @@ package io.codelaser.maddi.run.openjdkmain; -import ch.qos.logback.classic.Level; -import io.codelaser.maddi.util.corpus.Corpora; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.IOException; import java.nio.file.Files; @@ -32,9 +27,15 @@ import java.util.List; import java.util.stream.Stream; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import ch.qos.logback.classic.Level; +import io.codelaser.maddi.util.corpus.Corpora; /** * The rewire driver on fernflower, with its measurement and its oracle: the corpus run of diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRewireInheritedPrivateField.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRewireInheritedPrivateField.java index 02c39e5b7..9fbc1adf7 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRewireInheritedPrivateField.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRewireInheritedPrivateField.java @@ -17,55 +17,49 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; -import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; -import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import static io.codelaser.maddi.inspection.api.integration.JavaInspector.InvalidationState.*; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Stream; + +import javax.tools.JavaCompiler; +import javax.tools.JavaFileObject; +import javax.tools.StandardJavaFileManager; +import javax.tools.StandardLocation; +import javax.tools.ToolProvider; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.callgraph.ComputeCallGraph; -import io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField; import io.codelaser.maddi.callgraph.PrimaryTypeUseGraph; -import io.codelaser.maddi.modification.prepwork.io.AnalysisFingerprint; -import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; -import io.codelaser.maddi.cst.api.analysis.Value; -import io.codelaser.maddi.cst.api.element.FingerPrint; -import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; -import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.InfoMapView; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.Variable; -import io.codelaser.maddi.modification.prepwork.variable.Links; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.inspection.api.parser.ParseResult; import io.codelaser.maddi.inspection.api.resource.InputConfiguration; import io.codelaser.maddi.inspection.openjdk.JavaInspectorImpl; import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; - -import javax.tools.JavaCompiler; -import javax.tools.JavaFileObject; -import javax.tools.StandardJavaFileManager; -import javax.tools.StandardLocation; -import javax.tools.ToolProvider; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Stream; - -import static io.codelaser.maddi.inspection.api.integration.JavaInspector.InvalidationState.*; -import static org.junit.jupiter.api.Assertions.*; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.io.AnalysisFingerprint; +import io.codelaser.maddi.modification.prepwork.variable.Links; /** * A rewired subclass whose linked variables name an inherited private field: the field is declared in {@code Base} diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRewireTests.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRewireTests.java index f9e1b8288..fbdacbcf1 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRewireTests.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRewireTests.java @@ -17,14 +17,14 @@ package io.codelaser.maddi.run.openjdkmain; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.nio.file.Files; import java.nio.file.Path; import java.util.Map; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; /** * {@code rewire-tests} end to end: RunRewireTests edits a source file on disk, asks the inspector what changed, diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRunAnalyzer.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRunAnalyzer.java index 7502e79f5..88b643b03 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRunAnalyzer.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRunAnalyzer.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.run.openjdkmain; -import ch.qos.logback.classic.Level; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import static org.junit.jupiter.api.Assertions.*; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.stream.Stream; -import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import ch.qos.logback.classic.Level; @Disabled public class TestRunAnalyzer { diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRunComposer.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRunComposer.java index 56d16c2c4..83b440772 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRunComposer.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRunComposer.java @@ -17,17 +17,18 @@ package io.codelaser.maddi.run.openjdkmain; -import ch.qos.logback.classic.Level; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.File; + import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.File; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import ch.qos.logback.classic.Level; public class TestRunComposer { private static final Logger LOGGER = LoggerFactory.getLogger(TestRunComposer.class); diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRunShallowAnalyzer.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRunShallowAnalyzer.java index fda2473b8..0e58e7c0b 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRunShallowAnalyzer.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRunShallowAnalyzer.java @@ -17,19 +17,20 @@ package io.codelaser.maddi.run.openjdkmain; -import ch.qos.logback.classic.Level; -import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.File; +import java.util.Arrays; + import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.File; -import java.util.Arrays; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import ch.qos.logback.classic.Level; +import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; public class TestRunShallowAnalyzer { private static final Logger LOGGER = LoggerFactory.getLogger(TestRunShallowAnalyzer.class); diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestTimefoldSolver.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestTimefoldSolver.java index ab2309d60..c39adabe0 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestTimefoldSolver.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestTimefoldSolver.java @@ -1,18 +1,19 @@ package io.codelaser.maddi.run.openjdkmain; -import io.codelaser.maddi.util.corpus.Corpora; -import ch.qos.logback.classic.Level; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; + import org.apache.commons.cli.ParseException; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Tag; +import ch.qos.logback.classic.Level; +import io.codelaser.maddi.util.corpus.Corpora; @Tag("slow") // Only READS the shared timefold checkout -- but two tests in jfocus-refactor-service (TestTimefoldDeadCode, diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestTranslateWithFacts.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestTranslateWithFacts.java index 317ab5343..4b6fd7e2d 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestTranslateWithFacts.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestTranslateWithFacts.java @@ -17,13 +17,13 @@ package io.codelaser.maddi.run.openjdkmain; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; +import static org.junit.jupiter.api.Assertions.*; import java.nio.file.Files; import java.nio.file.Path; -import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; /** * {@code --translate kotlin|csharp} as the CLI runs it: the modification analysis with nullability, the nullability diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestWarmAnalysisAfterPartialReparse.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestWarmAnalysisAfterPartialReparse.java index 8a57c33d8..382e5ada3 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestWarmAnalysisAfterPartialReparse.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestWarmAnalysisAfterPartialReparse.java @@ -17,6 +17,25 @@ package io.codelaser.maddi.run.openjdkmain; +import static io.codelaser.maddi.inspection.api.integration.JavaInspector.InvalidationState.*; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.function.Consumer; +import java.util.function.Predicate; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + import io.codelaser.maddi.callgraph.CallGraphContributions; import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.callgraph.ComputeCallGraph; @@ -33,24 +52,6 @@ import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.io.AnalysisFingerprint; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; -import java.util.function.Consumer; -import java.util.function.Predicate; - -import static io.codelaser.maddi.inspection.api.integration.JavaInspector.InvalidationState.*; -import static org.junit.jupiter.api.Assertions.*; /** * The analysis on the objects a partial re-parse leaves, in one warm inspector: prep over the whole universe (the diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestWarmAnalysisWithCarry.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestWarmAnalysisWithCarry.java index a99ea692c..ec0d6e57d 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestWarmAnalysisWithCarry.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestWarmAnalysisWithCarry.java @@ -17,6 +17,25 @@ package io.codelaser.maddi.run.openjdkmain; +import static io.codelaser.maddi.inspection.api.integration.JavaInspector.InvalidationState.*; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; +import java.util.function.Predicate; + +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + import io.codelaser.maddi.callgraph.CallGraphContributions; import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.callgraph.ComputeCallGraph; @@ -37,24 +56,6 @@ import io.codelaser.maddi.modification.prepwork.ClearDerived; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.io.AnalysisFingerprint; -import org.intellij.lang.annotations.Language; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; -import java.util.TreeSet; -import java.util.function.Predicate; - -import static io.codelaser.maddi.inspection.api.integration.JavaInspector.InvalidationState.*; -import static org.junit.jupiter.api.Assertions.*; /** * A seeded analysis whose seed is the re-parsed type alone: the {@code REWIRE} cone's analyzer output is carried onto diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/K2RealmTestBootstrap.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/K2RealmTestBootstrap.java index b38dfd7fe..250f013eb 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/K2RealmTestBootstrap.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/K2RealmTestBootstrap.java @@ -17,11 +17,12 @@ package io.codelaser.maddi.run.kotlinmain; -import io.codelaser.maddi.kotlin.realm.K2Realm; +import java.io.UncheckedIOException; + import org.junit.platform.launcher.LauncherSession; import org.junit.platform.launcher.LauncherSessionListener; -import java.io.UncheckedIOException; +import io.codelaser.maddi.kotlin.realm.K2Realm; /** * Installs the K2 realm once, for every test in this module. The Kotlin compiler is not on this JVM's diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/KotlinFixture.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/KotlinFixture.java index c7c5f67be..e848e33f8 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/KotlinFixture.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/KotlinFixture.java @@ -17,6 +17,16 @@ package io.codelaser.maddi.run.kotlinmain; +import java.io.File; +import java.net.URI; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -29,16 +39,6 @@ import io.codelaser.maddi.inspection.resource.SourceSetImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import java.io.File; -import java.net.URI; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - /** * A mixed Kotlin+Java project written to a temporary directory, parsed and prepped: what a test needs to ask what * maddi made of a handful of sources, without a corpus. diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestCoilJvmSlice.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestCoilJvmSlice.java index 3ce5f125c..977fc8e08 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestCoilJvmSlice.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestCoilJvmSlice.java @@ -17,26 +17,27 @@ package io.codelaser.maddi.run.kotlinmain; -import io.codelaser.maddi.run.config.util.JsonStreaming; -import io.codelaser.maddi.util.corpus.Corpora; -import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.runtime.RuntimeImpl; -import io.codelaser.maddi.inspection.kotlin.KotlinInspector; -import io.codelaser.maddi.inspection.mixed.MixedProjectInspector; -import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.IOException; import java.nio.file.Path; import java.util.List; import java.util.Map; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.cst.api.element.SourceSet; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.runtime.RuntimeImpl; +import io.codelaser.maddi.inspection.kotlin.KotlinInspector; +import io.codelaser.maddi.inspection.mixed.MixedProjectInspector; +import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; +import io.codelaser.maddi.run.config.util.JsonStreaming; +import io.codelaser.maddi.util.corpus.Corpora; /** * The first Kotlin corpus test: the JVM slice of coil's diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestCollectionHoldersVsJava.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestCollectionHoldersVsJava.java index 89a9b0b6a..329d27418 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestCollectionHoldersVsJava.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestCollectionHoldersVsJava.java @@ -17,6 +17,21 @@ package io.codelaser.maddi.run.kotlinmain; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.Info; @@ -32,21 +47,7 @@ import io.codelaser.maddi.kotlin.api.PlaceholderCensus; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * The type verdict of a holder of a collection: an interface whose property is a {@code Collection}, a final class diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestDetektCorpus.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestDetektCorpus.java index 2dc20591e..a304ed348 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestDetektCorpus.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestDetektCorpus.java @@ -17,26 +17,27 @@ package io.codelaser.maddi.run.kotlinmain; -import io.codelaser.maddi.run.config.util.JsonStreaming; -import io.codelaser.maddi.util.corpus.Corpora; -import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.cst.impl.runtime.RuntimeImpl; -import io.codelaser.maddi.inspection.kotlin.KotlinInspector; -import io.codelaser.maddi.inspection.mixed.MixedProjectInspector; -import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.IOException; import java.nio.file.Path; import java.util.List; import java.util.Map; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.cst.api.element.SourceSet; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.runtime.RuntimeImpl; +import io.codelaser.maddi.inspection.kotlin.KotlinInspector; +import io.codelaser.maddi.inspection.mixed.MixedProjectInspector; +import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; +import io.codelaser.maddi.run.config.util.JsonStreaming; +import io.codelaser.maddi.util.corpus.Corpora; /** * The second Kotlin corpus, and the one that exercises what {@link TestCoilJvmSlice} cannot. diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestDocLinkDoesNotSuppressARecordedReference.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestDocLinkDoesNotSuppressARecordedReference.java index aacceff44..c54f81a75 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestDocLinkDoesNotSuppressARecordedReference.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestDocLinkDoesNotSuppressARecordedReference.java @@ -17,21 +17,22 @@ package io.codelaser.maddi.run.kotlinmain; -import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.graph.V; -import io.codelaser.maddi.callgraph.ComputeCallGraph; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.nio.file.Path; import java.util.Map; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import io.codelaser.maddi.callgraph.ComputeCallGraph; +import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.graph.V; /** * A KDoc link must not cost the member its reference edge. {@code ComputeCallGraph.doRecordedReferences} adds diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestExposedCorpus.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestExposedCorpus.java index 240165517..3ba2ceb80 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestExposedCorpus.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestExposedCorpus.java @@ -17,6 +17,18 @@ package io.codelaser.maddi.run.kotlinmain; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.List; +import java.util.Map; + +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.runtime.RuntimeImpl; @@ -25,17 +37,6 @@ import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; import io.codelaser.maddi.run.config.util.JsonStreaming; import io.codelaser.maddi.util.corpus.Corpora; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.nio.file.Path; -import java.util.List; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertTrue; /** * The third Kotlin/JVM corpus, for VOLUME in a style detekt does not write. diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinAbstractMember.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinAbstractMember.java index ccc2a776d..1725fc0bb 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinAbstractMember.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinAbstractMember.java @@ -17,6 +17,23 @@ package io.codelaser.maddi.run.kotlinmain; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.File; +import java.net.URI; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.Info; @@ -30,22 +47,6 @@ import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; import io.codelaser.maddi.inspection.resource.SourceSetImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; - -import java.io.File; -import java.net.URI; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import java.util.stream.StreamSupport; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; /** * The same interface written twice, once in Kotlin and once in Java: does maddi model the two the same way? diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinAnalysisRoundTrip.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinAnalysisRoundTrip.java index 616a22dcb..3628b1f14 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinAnalysisRoundTrip.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinAnalysisRoundTrip.java @@ -16,7 +16,24 @@ */ package io.codelaser.maddi.run.kotlinmain; -import io.codelaser.maddi.cst.api.analysis.Value; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; +import io.codelaser.maddi.cst.api.analysis.Codec; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -31,28 +48,11 @@ import io.codelaser.maddi.inspection.resource.SourceSetImpl; import io.codelaser.maddi.kotlin.api.PlaceholderCensus; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import io.codelaser.maddi.modification.link.io.LinkCodec; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; -import io.codelaser.maddi.cst.api.analysis.Codec; -import io.codelaser.maddi.modification.link.io.LinkCodec; import io.codelaser.maddi.modification.prepwork.io.WriteAnalysisResults; import io.codelaser.maddi.util.Trie; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; /** * ⭐ Ladder rung 6: a real Kotlin round trip. A first session parses, analyses and WRITES; a second, diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinArchiveAttaches.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinArchiveAttaches.java index 7aad06e9f..95b0ccac9 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinArchiveAttaches.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinArchiveAttaches.java @@ -16,6 +16,18 @@ */ package io.codelaser.maddi.run.kotlinmain; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.TreeMap; +import java.util.stream.Stream; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -25,17 +37,6 @@ import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; import io.codelaser.maddi.inspection.resource.SourceSetImpl; import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; - -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.List; -import java.util.TreeMap; -import java.util.stream.Stream; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * A contract in the kotlin archive must reach the method a Kotlin call resolves to. It did not for any generic diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinCollectionReadsVsJava.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinCollectionReadsVsJava.java index 06b0c50d5..0baa50e3b 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinCollectionReadsVsJava.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinCollectionReadsVsJava.java @@ -16,6 +16,21 @@ */ package io.codelaser.maddi.run.kotlinmain; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -30,21 +45,7 @@ import io.codelaser.maddi.kotlin.api.PlaceholderCensus; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * A field only READ through a stdlib collection extension -- {@code s.joinToString()}, {@code s.isNotEmpty()}, diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinContractsVsJava.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinContractsVsJava.java index 57b87e7d6..383202131 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinContractsVsJava.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinContractsVsJava.java @@ -16,6 +16,22 @@ */ package io.codelaser.maddi.run.kotlinmain; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -31,22 +47,7 @@ import io.codelaser.maddi.kotlin.api.PlaceholderCensus; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotEquals; /** * A contract written as an annotation on Kotlin must mean what the same annotation means on Java. The analyzer's diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinLambdaVsJavaLambda.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinLambdaVsJavaLambda.java index 39980aa82..c1fe1701c 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinLambdaVsJavaLambda.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinLambdaVsJavaLambda.java @@ -16,7 +16,22 @@ */ package io.codelaser.maddi.run.kotlinmain; -import io.codelaser.maddi.cst.api.analysis.Value; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -32,23 +47,7 @@ import io.codelaser.maddi.kotlin.api.PlaceholderCensus; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; /** * ⭐ Tier 3, item 2: the link engine had zero Kotlin tests, and one concrete reason to expect a diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinLazyVsJavaLazy.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinLazyVsJavaLazy.java index 79ca59144..54d12af87 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinLazyVsJavaLazy.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinLazyVsJavaLazy.java @@ -17,6 +17,22 @@ package io.codelaser.maddi.run.kotlinmain; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.File; +import java.net.URI; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.FieldInfo; @@ -34,22 +50,7 @@ import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.io.File; -import java.net.URI; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; /** * A lazily initialised value, written twice: once in Kotlin and once in Java, through diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinPredicatesVsJava.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinPredicatesVsJava.java index 6fe1c0509..7fa5104b1 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinPredicatesVsJava.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinPredicatesVsJava.java @@ -16,10 +16,24 @@ */ package io.codelaser.maddi.run.kotlinmain; -import io.codelaser.maddi.cst.api.analysis.Value; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.Info; -import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; @@ -32,23 +46,7 @@ import io.codelaser.maddi.kotlin.api.PlaceholderCensus; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; /** * A read-only predicate over a field must leave the field unmodified, as Java's {@code stream().anyMatch(..)} does. diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinPrepFailures.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinPrepFailures.java index eee74f55d..62ad64304 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinPrepFailures.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinPrepFailures.java @@ -17,15 +17,16 @@ package io.codelaser.maddi.run.kotlinmain; -import io.codelaser.maddi.modification.common.AnalyzerException; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.nio.file.Path; import java.util.List; import java.util.Map; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import io.codelaser.maddi.modification.common.AnalyzerException; /** * The two shapes prep could not analyse on detekt (CodeLaser/maddi#32), each written down as the source that made it fail. Prep diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinScopeFunctionsVsJava.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinScopeFunctionsVsJava.java index da9c03f42..c8c869079 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinScopeFunctionsVsJava.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinScopeFunctionsVsJava.java @@ -16,6 +16,21 @@ */ package io.codelaser.maddi.run.kotlinmain; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -30,21 +45,7 @@ import io.codelaser.maddi.kotlin.api.PlaceholderCensus; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * The scope functions and preconditions -- {@code let}, {@code apply}, {@code also}, {@code takeIf}, {@code run}, diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestLoweredShapesVsJava.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestLoweredShapesVsJava.java index 9a8d910f9..ce879f7e6 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestLoweredShapesVsJava.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestLoweredShapesVsJava.java @@ -17,13 +17,27 @@ package io.codelaser.maddi.run.kotlinmain; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.expression.MethodReference; +import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; -import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; @@ -31,27 +45,12 @@ import io.codelaser.maddi.graph.G; import io.codelaser.maddi.inspection.api.resource.InputConfiguration; import io.codelaser.maddi.inspection.mixed.MixedProjectInspector; -import io.codelaser.maddi.kotlin.api.PlaceholderCensus; import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.kotlin.api.PlaceholderCensus; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static org.junit.jupiter.api.Assertions.assertEquals; /** * ⭐ Does the modification analysis reach the same conclusion about a lowered Kotlin shape as about the diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestMixedBoundaryVerdicts.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestMixedBoundaryVerdicts.java index 83a8ff543..03f3101f4 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestMixedBoundaryVerdicts.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestMixedBoundaryVerdicts.java @@ -16,7 +16,25 @@ */ package io.codelaser.maddi.run.kotlinmain; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; @@ -24,7 +42,6 @@ import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; -import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.graph.G; import io.codelaser.maddi.inspection.api.resource.InputConfiguration; import io.codelaser.maddi.inspection.mixed.MixedProjectInspector; @@ -33,23 +50,7 @@ import io.codelaser.maddi.kotlin.api.PlaceholderCensus; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; -import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; /** * ⭐ Does a verdict cross the language boundary? {@code TestLoweredShapesVsJava} answers it in the diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestMixedMain.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestMixedMain.java index d19a195e8..13d4981be 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestMixedMain.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestMixedMain.java @@ -17,20 +17,21 @@ package io.codelaser.maddi.run.kotlinmain; -import io.codelaser.maddi.run.config.util.JsonStreaming; -import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.inspection.api.resource.InputConfiguration; -import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.io.File; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import io.codelaser.maddi.cst.api.element.SourceSet; +import io.codelaser.maddi.inspection.api.resource.InputConfiguration; +import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.codelaser.maddi.run.config.util.JsonStreaming; /** * Drives the {@link Main} CLI through {@code --input-configuration} on a tiny mixed Java+Kotlin project written to diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestOneEntryPointAnalysis.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestOneEntryPointAnalysis.java index 1f302fe9e..3ceae763c 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestOneEntryPointAnalysis.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestOneEntryPointAnalysis.java @@ -17,15 +17,8 @@ package io.codelaser.maddi.run.kotlinmain; -import io.codelaser.maddi.run.config.report.ExitCode; -import io.codelaser.maddi.run.config.util.JavaModules; -import io.codelaser.maddi.run.config.util.JsonStreaming; -import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import org.apache.commons.cli.Option; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.File; import java.nio.file.Files; @@ -34,9 +27,16 @@ import java.util.Set; import java.util.stream.Collectors; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.apache.commons.cli.Option; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import io.codelaser.maddi.cst.api.element.SourceSet; +import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.codelaser.maddi.run.config.report.ExitCode; +import io.codelaser.maddi.run.config.util.JavaModules; +import io.codelaser.maddi.run.config.util.JsonStreaming; /** * "One entry point" as a test. {@code bin/maddi-kotlin} must be a strict SUPERSET of {@code bin/maddi}: diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestRetrofitCorpus.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestRetrofitCorpus.java index 01f491fae..10c54911b 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestRetrofitCorpus.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestRetrofitCorpus.java @@ -17,15 +17,7 @@ package io.codelaser.maddi.run.kotlinmain; -import io.codelaser.maddi.cst.api.info.TypeInfo; -import io.codelaser.maddi.inspection.mixed.MixedProjectInspector; -import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; -import io.codelaser.maddi.run.config.util.JsonStreaming; -import io.codelaser.maddi.util.corpus.Corpora; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.IOException; import java.nio.file.Path; @@ -33,7 +25,16 @@ import java.util.Set; import java.util.stream.Collectors; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.inspection.mixed.MixedProjectInspector; +import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; +import io.codelaser.maddi.run.config.util.JsonStreaming; +import io.codelaser.maddi.util.corpus.Corpora; /** * The MIXED corpus: Java and Kotlin inside the same source sets, which neither {@link TestDetektCorpus} nor diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestRunMixedPrepAnalyzer.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestRunMixedPrepAnalyzer.java index 0c16e9c05..8f0d07f9e 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestRunMixedPrepAnalyzer.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestRunMixedPrepAnalyzer.java @@ -17,18 +17,19 @@ package io.codelaser.maddi.run.kotlinmain; -import io.codelaser.maddi.inspection.api.resource.InputConfiguration; -import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import io.codelaser.maddi.cst.api.element.SourceSet; +import io.codelaser.maddi.inspection.api.resource.InputConfiguration; +import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; /** * Drives {@link RunMixedPrepAnalyzer} end to end on a tiny mixed Java+Kotlin project written to disk: a Kotlin diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestSealedErrorHierarchy.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestSealedErrorHierarchy.java index 49f3e77c7..2daf1ce85 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestSealedErrorHierarchy.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestSealedErrorHierarchy.java @@ -17,12 +17,7 @@ package io.codelaser.maddi.run.kotlinmain; -import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.inspection.api.resource.InputConfiguration; -import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.io.File; import java.net.URI; @@ -33,7 +28,13 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import io.codelaser.maddi.cst.api.element.SourceSet; +import io.codelaser.maddi.inspection.api.resource.InputConfiguration; +import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; /** * detekt's {@code DetektError.kt}, the whole file, on its own: the shape behind CodeLaser/maddi#34. {@code IssuesFound} and diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestShippedResultsLoaded.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestShippedResultsLoaded.java index 4ff45e2ef..c2cc4b120 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestShippedResultsLoaded.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestShippedResultsLoaded.java @@ -16,13 +16,7 @@ */ package io.codelaser.maddi.run.kotlinmain; -import io.codelaser.maddi.cst.api.element.SourceSet; -import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; -import io.codelaser.maddi.inspection.resource.SourceSetImpl; -import io.codelaser.maddi.run.config.util.JavaModules; -import io.codelaser.maddi.run.config.util.JsonStreaming; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.io.File; import java.nio.file.Files; @@ -31,7 +25,14 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import io.codelaser.maddi.cst.api.element.SourceSet; +import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; +import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.codelaser.maddi.run.config.util.JavaModules; +import io.codelaser.maddi.run.config.util.JsonStreaming; /** * The CLI loads the analysis results maddi ships without being asked (CodeLaser/maddi-mod#15). The same project, run From cbed5c205daa8925d736fab288876b8ca92fe09a Mon Sep 17 00:00:00 2001 From: Tom Tourwe Date: Wed, 4 Nov 2026 17:00:04 +0100 Subject: [PATCH 2/2] run B: structure.optimizeImports(["**"], shortenQualifiedNames=True) --- .../aapi/parser/AnalysisHintsCompiler.java | 3 +- .../aapi/parser/AnalysisHintsParser.java | 5 +- .../aapi/parser/DecoratorWithComments.java | 2 +- .../aapi/parser/CompileAnalysisHints.java | 57 ++- .../aapi/parser/ComposeAnalysisHints.java | 37 +- .../parser/TestAnalysisHintsComposer.java | 4 +- .../aapi/parser/TestParseAnalyzeWrite.java | 2 +- .../aapi/parser/archive/TestJavaUtil.java | 9 +- .../aapi/parser/example/popular/OrgSlf4J.java | 11 +- .../analyzer/AnalysisProgressFeed.java | 3 +- .../analyzer/CheckpointWriter.java | 22 +- .../analyzer/IteratingAnalyzer.java | 21 +- .../analyzer/SingleIterationAnalyzer.java | 15 +- .../impl/AbstractMethodAnalyzerImpl.java | 25 +- .../analyzer/impl/ContractResolution.java | 5 +- .../analyzer/impl/DependentCulprit.java | 8 +- .../impl/DynamicImmutabilityInference.java | 3 +- .../analyzer/impl/EventualCluster.java | 20 +- .../impl/EventualClusterContraction.java | 3 +- .../analyzer/impl/FieldAnalyzerImpl.java | 18 +- .../analyzer/impl/GuardAnalyzerImpl.java | 7 +- .../analyzer/impl/IteratingAnalyzerImpl.java | 338 ++++++++++-------- .../impl/SingleIterationAnalyzerImpl.java | 83 +++-- .../impl/SourceContractMaterializer.java | 26 +- .../impl/StaticSideEffectAnalyzerImpl.java | 10 +- .../analyzer/impl/TypeCulprit.java | 10 +- .../impl/TypeEventualAnalyzerImpl.java | 9 +- .../impl/TypeImmutableAnalyzerImpl.java | 9 +- .../impl/TypeIndependentAnalyzerImpl.java | 38 +- .../impl/TypeModIndyAnalyzerImpl.java | 45 ++- .../analyzer/nullability/CallResults.java | 9 +- .../analyzer/nullability/Contracts.java | 24 +- .../analyzer/nullability/Index.java | 9 +- .../analyzer/nullability/MethodWalker.java | 29 +- .../analyzer/nullability/Nodes.java | 12 +- .../analyzer/nullability/NonNullFacts.java | 38 +- .../analyzer/nullability/NullGraph.java | 16 +- .../analyzer/nullability/NullPredicates.java | 13 +- .../nullability/NullabilityComparison.java | 5 +- .../analyzer/nullability/NullabilityPass.java | 27 +- .../analyzer/nullability/Preconditions.java | 6 +- .../analyzer/nullability/ReadNarrowing.java | 11 +- .../analyzer/nullability/Report.java | 5 +- .../analyzer/nullability/Seeds.java | 26 +- .../analyzer/nullability/Tolerance.java | 6 +- .../analyzer/nullability/TypeUses.java | 38 +- .../analyzer/nullability/Types.java | 5 +- .../shadow/ShadowModificationPass.java | 63 ++-- .../analyzer/clonebench/TestCloneBench.java | 2 +- .../clonebench/TestGiantSwitchRepro.java | 3 +- .../clonebench/TestHCTNotYetLoaded.java | 3 +- .../TestEventualClusterAssumptions.java | 3 +- .../TestEventuallyUnmodifiedParameter.java | 5 +- .../field/TestFieldAnalyzerFinalField.java | 35 +- .../integration/TestCheckpointResume.java | 9 +- .../TestExtensibleHiddenContent.java | 3 +- .../io/TestWriteAnalysisUnnamedPackage.java | 3 +- .../kotlin/CommonKotlinAnalyzerTest.java | 3 +- .../analyzer/method/TestDelegatingUnion.java | 3 +- .../modification/TestBridgeLinkDrop.java | 8 +- .../modification/TestDeepCaptureChain.java | 5 +- .../TestHiddenContentToModifiedArgument.java | 3 +- .../modification/TestJacksonCommonsIo.java | 18 +- .../modification/TestLoggerModification.java | 3 +- .../TestLoopTransformDivergence.java | 15 +- .../modification/TestMockitoVerify.java | 12 +- .../modification/TestObjectReturnDefault.java | 3 +- .../TestOptimisticModificationShapes.java | 15 +- .../TestRecursionThroughAbstract.java | 5 +- .../TestSetterArgumentNotModified.java | 3 +- .../modification/TestStaticSideEffects.java | 19 +- .../modification/TestViewMethods.java | 5 +- .../TestVisitPredicateDisclaimer.java | 5 +- .../nolink/TestDefaultMethodModification.java | 8 +- .../analyzer/nolink/TestIteration.java | 3 +- .../nullability/NullabilityFixtures.java | 11 +- .../analyzer/nullability/TestCallResults.java | 37 +- .../analyzer/nullability/TestContracts.java | 58 +-- .../nullability/TestMethodWalker.java | 159 ++++---- .../analyzer/nullability/TestNullGraph.java | 74 ++-- .../nullability/TestPreconditions.java | 24 +- .../nullability/TestReadNarrowing.java | 17 +- .../analyzer/nullability/TestSeeds.java | 40 ++- .../analyzer/nullability/TestSwitches.java | 11 +- .../analyzer/nullability/TestVerdicts.java | 26 +- .../analyzer/rewire/TestDerivedRewire.java | 7 +- .../shadow/TestReachabilityOnClosure.java | 12 +- .../analyzer/shadow/TestShadowCloneBench.java | 9 +- .../modification/common/AnalysisHelper.java | 17 +- .../common/defaults/AnnotationToProperty.java | 21 +- .../common/defaults/ShallowTypeAnalyzer.java | 3 +- .../common/getset/ApplyGetSetTranslation.java | 4 +- .../common/getset/GetSetHelper.java | 4 +- .../modification/common/util/Culprits.java | 3 +- .../common/util/IsolateClass.java | 18 +- .../common/util/IsolateMethod.java | 4 +- .../common/util/IsolationCore.java | 3 +- .../common/util/TolerantWrite.java | 53 +-- .../common/TestIsolateClass5Group.java | 6 +- .../TestIsolateClass6FreshFactories.java | 3 +- .../common/TestIsolateClass8Natures.java | 3 +- .../common/TestTypeBoundWildcardPrinting.java | 7 +- .../defaults/TestInheritedNullability.java | 3 +- .../maddi/modification/common/CommonTest.java | 7 +- .../maddi/modification/link/LinkComputer.java | 6 +- .../link/impl/ExpressionVisitor.java | 3 +- .../link/impl/LinkComputerImpl.java | 37 +- .../link/impl/LinkNatureImpl.java | 6 +- .../link/impl/MethodLinkedVariablesImpl.java | 18 +- .../modification/link/impl/ReceiverLevel.java | 3 +- .../link/impl/WriteLinksAndModification.java | 25 +- .../link/impl/linkgraph/FollowGraph.java | 7 +- .../link/impl/linkgraph/Graph.java | 23 +- .../link/impl/linkgraph/SharedVariables.java | 209 ++++++----- .../VirtualModificationIdenticals.java | 6 +- .../link/impl/localvar/SharedVariable.java | 25 +- .../maddi/modification/link/io/LinkCodec.java | 10 +- .../link/impl/TestAdapterChainGrowth.java | 5 +- .../impl/TestConcurrentMethodCallWrite.java | 3 +- .../link/impl/TestMediatedLinks.java | 5 +- .../impl/graph/TestClosureWitnessIndex.java | 4 +- .../impl/graph/TestEngineDeterminism.java | 3 +- .../link/io/TestJdkCollectionMutators.java | 3 +- .../link/io/TestJdkCollectionViews.java | 11 +- .../link/io/TestJdkReadOnlyTypes.java | 6 +- .../link/io/TestLoadAnalyzedPackageFiles.java | 7 +- .../link/kotlin/CommonKotlinLinkTest.java | 3 +- .../link/kotlin/TestKotlinLinkFunctions.java | 9 +- .../link/vf/TestVirtualFieldComputer.java | 4 +- .../link/vf/TestVirtualFieldComputer3.java | 5 +- .../modification/prepwork/MethodAnalyzer.java | 2 +- .../modification/prepwork/PrepAnalyzer.java | 51 +-- .../maddi/modification/prepwork/Util.java | 6 +- .../prepwork/io/DecoratorImpl.java | 6 +- .../prepwork/io/IncrementalState.java | 8 +- .../prepwork/io/LoadAnalysisResults.java | 7 +- .../prepwork/io/NullabilityDecorator.java | 2 +- .../prepwork/io/WriteAnalysisResults.java | 5 +- .../prepwork/variable/impl/LinksImpl.java | 13 +- .../variable/impl/VariableDataImpl.java | 3 +- .../impl/VariableInfoContainerImpl.java | 8 +- .../variable/impl/VariableInfoImpl.java | 14 +- .../prepwork/TestAnonymousMemberRecord.java | 6 +- .../TestGap151SwitchInAnonymousField.java | 6 +- .../prepwork/TestPrepAfterPartialReparse.java | 6 +- .../callgraph/TestJavadocEdgeIsFiltered.java | 8 +- .../callgraph/TestPrimaryTypeUseGraph.java | 3 +- .../io/TestAnalysisResultsFormat.java | 6 +- .../prepwork/io/TestModuleGatedHints.java | 3 +- .../prepwork/kotlin/CommonKotlinTest.java | 3 +- .../TestShadowedCapturedVariable.java | 3 +- .../run/analysis/AnalysisEngineImpl.java | 21 +- .../maddi/run/main/TestRunComposer.java | 2 +- .../run/main/TestRunShallowAnalyzer.java | 2 +- .../GenerateSupportAnalysisResults.java | 9 +- .../TestAnalysisEarlyCutoffPrototype.java | 22 +- .../TestAnalysisHintsCompilation.java | 6 +- .../run/openjdkmain/TestEarlyCutoffSkip.java | 3 +- .../TestEarlyCutoffWorklistDriver.java | 3 +- .../TestFernflowerNullabilityCauses.java | 60 ++-- .../maddi/run/openjdkmain/TestGuava.java | 4 +- .../TestIncrementalConsumptionWake.java | 6 +- .../TestIsolateFernflowerGroup.java | 12 +- .../TestJavaToCSharpFernflowerFacts.java | 6 +- .../TestJavaToCSharpLangchain4jFacts.java | 6 +- .../TestJavaToCSharpTimefoldFacts.java | 10 +- .../openjdkmain/TestJavaToKotlinAblation.java | 6 +- ...TestJavaToKotlinFernflowerNullability.java | 6 +- .../TestJavaToKotlinGuavaNullability.java | 6 +- .../TestJavaToKotlinJenkinsNullability.java | 6 +- ...estJavaToKotlinLangchain4jNullability.java | 6 +- .../TestJavaToKotlinNacosNullability.java | 6 +- .../TestJavaToKotlinPreconditions.java | 6 +- .../TestJavaToKotlinTimefoldNullability.java | 6 +- .../openjdkmain/TestKotlinConfReproduce.java | 6 +- .../TestLangchain4jCollections.java | 29 +- .../openjdkmain/TestLibraryCallCensus.java | 9 +- .../TestNullabilityOracleGuava.java | 16 +- .../openjdkmain/TestOutsideReloadCarry.java | 4 +- .../run/openjdkmain/TestParSeqLinkBench.java | 3 +- .../TestRewireInheritedPrivateField.java | 12 +- .../run/openjdkmain/TestRunComposer.java | 2 +- .../openjdkmain/TestRunShallowAnalyzer.java | 2 +- .../TestWarmAnalysisAfterPartialReparse.java | 20 +- .../TestWarmAnalysisWithCarry.java | 3 +- .../run/kotlinmain/K2RealmTestBootstrap.java | 3 +- .../TestKotlinAnalysisRoundTrip.java | 3 +- .../kotlinmain/TestKotlinArchiveAttaches.java | 3 +- .../TestKotlinCollectionReadsVsJava.java | 3 +- .../kotlinmain/TestKotlinContractsVsJava.java | 3 +- .../TestKotlinLambdaVsJavaLambda.java | 12 +- .../kotlinmain/TestKotlinLazyVsJavaLazy.java | 3 +- .../TestKotlinPredicatesVsJava.java | 12 +- .../TestKotlinScopeFunctionsVsJava.java | 3 +- .../kotlinmain/TestLoweredShapesVsJava.java | 3 +- .../kotlinmain/TestOneEntryPointAnalysis.java | 6 +- 196 files changed, 1790 insertions(+), 1241 deletions(-) diff --git a/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsCompiler.java b/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsCompiler.java index 9120478bb..04dfd5c3d 100644 --- a/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsCompiler.java +++ b/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsCompiler.java @@ -24,6 +24,7 @@ import java.util.List; import java.util.Set; +import org.slf4j.Logger; import org.slf4j.LoggerFactory; import io.codelaser.maddi.cst.api.analysis.Message; @@ -51,7 +52,7 @@ - AnalysisHintsWriter (here, to update the hints file), uses AnalysisHintsComposer */ public class AnalysisHintsCompiler { - private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(AnalysisHintsCompiler.class); + private static final Logger LOGGER = LoggerFactory.getLogger(AnalysisHintsCompiler.class); private final CompilerVisitor compilerVisitor; private final JavaInspectorFactory javaInspectorFactory; diff --git a/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsParser.java b/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsParser.java index 5cb2fd217..e7a1cbede 100644 --- a/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsParser.java +++ b/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/AnalysisHintsParser.java @@ -30,6 +30,7 @@ import io.codelaser.maddi.cst.api.expression.AnnotationExpression; import io.codelaser.maddi.cst.api.info.*; import io.codelaser.maddi.cst.api.type.ParameterizedType; +import io.codelaser.maddi.cst.api.type.Wildcard; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.inspection.api.integration.JavaInspectorFactory; import io.codelaser.maddi.inspection.api.parser.ParseResult; @@ -366,8 +367,8 @@ private static boolean sameErasedBounds(TypeParameter tp1, TypeParameter tp2) { return b1.equals(b2); } - private static boolean sameWildcard(io.codelaser.maddi.cst.api.type.Wildcard w1, - io.codelaser.maddi.cst.api.type.Wildcard w2) { + private static boolean sameWildcard(Wildcard w1, + Wildcard w2) { if (w1 == null || w2 == null) return w1 == w2; return w1.isUnbound() == w2.isUnbound() && w1.isExtends() == w2.isExtends() && w1.isSuper() == w2.isSuper(); } diff --git a/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/DecoratorWithComments.java b/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/DecoratorWithComments.java index 9f0bda80c..2c87a2688 100644 --- a/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/DecoratorWithComments.java +++ b/maddi-aapi-parser/src/main/java/io/codelaser/maddi/aapi/parser/DecoratorWithComments.java @@ -39,7 +39,7 @@ class DecoratorWithComments extends DecoratorImpl { - private final io.codelaser.maddi.cst.api.runtime.Runtime runtime; + private final Runtime runtime; private final Map translationMap; private final Function dataProvider; private final Function infoDataProvider; diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/CompileAnalysisHints.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/CompileAnalysisHints.java index b92505754..c7430c2bd 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/CompileAnalysisHints.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/CompileAnalysisHints.java @@ -25,13 +25,30 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.jar.JarEntry; import java.util.jar.JarOutputStream; +import org.apache.commons.io.IOUtils; +import org.assertj.core.api.Assertions; +import org.eclipse.collections.api.RichIterable; +import org.eclipse.collections.impl.factory.Lists; +import org.hamcrest.Matcher; +import org.hamcrest.Matchers; +import org.junit.jupiter.api.extension.ParameterResolutionException; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.platform.commons.JUnitException; +import org.mockito.Mockito; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.ImmutableList; +import com.google.common.util.concurrent.internal.InternalFutureFailureAccess; + import ch.qos.logback.classic.Level; import io.codelaser.maddi.annotation.Immutable; import io.codelaser.maddi.cst.api.analysis.Message; @@ -41,6 +58,10 @@ import io.codelaser.maddi.inspection.openjdk.JavaInspectorImpl; import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; import io.codelaser.maddi.inspection.resource.SourceSetImpl; +import io.vavr.Value; +import io.vavr.match.annotation.Patterns; +import kotlin.Lazy; +import net.bytebuddy.ByteBuddy; /** * Compiles the hand-written analysis hints in {@code maddi-aapi-archive/src/main/java} into the analysis-result @@ -123,7 +144,7 @@ static int committedJdkRelease() throws IOException { } static int runningJdkRelease() { - return java.lang.Runtime.version().feature(); + return Runtime.version().feature(); } /** Compile every configured library into the committed location. */ @@ -177,42 +198,42 @@ public static void compileAll(Path resultsBase, boolean includeJdk) throws IOExc // as for kotlin: the jar must be LOADABLE, through a factory of its own, so that no other library's // class path changes (CodeLaser/maddi#116) compile(new AnalysisHintsCompiler(libraryJavaInspectorFactory("org.assertj.core.api.", - org.assertj.core.api.Assertions.class), null, jdkPreload), library, resultsBase); + Assertions.class), null, jdkPreload), library, resultsBase); } else if (GUAVA_LIBRARY.equals(library)) { // the same; failureaccess too: guava's class files reference InternalFutureFailureAccess, a stub // would eat the util.concurrent verdicts the collect hints' signatures reach compile(new AnalysisHintsCompiler(libraryJavaInspectorFactory("com.google.common.", - com.google.common.collect.ImmutableList.class, - com.google.common.util.concurrent.internal.InternalFutureFailureAccess.class), null, jdkPreload), + ImmutableList.class, + InternalFutureFailureAccess.class), null, jdkPreload), library, resultsBase); } else if (HAMCREST_LIBRARY.equals(library)) { // as for AssertJ: the jar through a factory of its own (the library-call census, 2026-10-12) compile(new AnalysisHintsCompiler(libraryJavaInspectorFactory("org.hamcrest.", - org.hamcrest.Matchers.class), null, jdkPreload), library, resultsBase); + Matchers.class), null, jdkPreload), library, resultsBase); } else if (MOCKITO_LIBRARY.equals(library)) { // as for AssertJ (the verification calls, after the library-call census of 2026-10-12); the jars // Mockito's class files reference too, so that they are not stubbed (JUnit 4 is not on this class path, // objenesis only at run time) compile(new AnalysisHintsCompiler(libraryJavaInspectorFactory("org.mockito.", - org.mockito.Mockito.class, net.bytebuddy.ByteBuddy.class, - org.hamcrest.Matcher.class), null, jdkPreload), library, resultsBase); + Mockito.class, ByteBuddy.class, + Matcher.class), null, jdkPreload), library, resultsBase); } else if (COMMONS_IO_LIBRARY.equals(library)) { // as for AssertJ (the library-call census, 2026-10-13) compile(new AnalysisHintsCompiler(libraryJavaInspectorFactory("org.apache.commons.io.", - org.apache.commons.io.IOUtils.class), null, jdkPreload), library, resultsBase); + IOUtils.class), null, jdkPreload), library, resultsBase); } else if (JACKSON_LIBRARY.equals(library)) { // the same; jackson-core and -annotations too, which databind's signatures name compile(new AnalysisHintsCompiler(libraryJavaInspectorFactory("com.fasterxml.jackson.", - com.fasterxml.jackson.databind.ObjectMapper.class, com.fasterxml.jackson.core.JsonParser.class, - com.fasterxml.jackson.annotation.JsonInclude.class), null, jdkPreload), library, resultsBase); + ObjectMapper.class, JsonParser.class, + JsonInclude.class), null, jdkPreload), library, resultsBase); } else if (JUNIT_PARAMS_LIBRARY.equals(library)) { // junit-jupiter-params is not on the shared factory, which carries junit-jupiter-api only; the api and // platform-commons jars too, which its class files reference (otherwise JUnitException and // ParameterResolutionException are stubbed) compile(new AnalysisHintsCompiler(libraryJavaInspectorFactory("org.junit.jupiter.params.", - org.junit.jupiter.params.provider.Arguments.class, - org.junit.jupiter.api.extension.ParameterResolutionException.class, - org.junit.platform.commons.JUnitException.class), null, jdkPreload), library, resultsBase); + Arguments.class, + ParameterResolutionException.class, + JUnitException.class), null, jdkPreload), library, resultsBase); } else { compile(JDK_LIBRARY.equals(library) ? compiler : compilerWithJdk, library, resultsBase); } @@ -224,13 +245,13 @@ public static void compileAll(Path resultsBase, boolean includeJdk) throws IOExc // vavr-match too: io.vavr.Patterns is annotated with io.vavr.match.annotation.Patterns, and without // that class file a stub is created and Patterns' $Cons/$Tuple2/... lose their verdicts compile(new AnalysisHintsCompiler(libraryJavaInspectorFactory("io.vavr.", - io.vavr.Value.class, io.vavr.match.annotation.Patterns.class), null, jdkPreload), library, + Value.class, Patterns.class), null, jdkPreload), library, resultsBase); } else if (ECLIPSE_COLLECTIONS_LIBRARY.equals(library)) { // the API jar AND the implementation jar: the hints cover both compile(new AnalysisHintsCompiler(libraryJavaInspectorFactory("org.eclipse.collections.", - org.eclipse.collections.api.RichIterable.class, - org.eclipse.collections.impl.factory.Lists.class), null, jdkPreload), library, resultsBase); + RichIterable.class, + Lists.class), null, jdkPreload), library, resultsBase); } else { throw new UnsupportedOperationException("No inspector factory for side-loaded " + library); } @@ -247,7 +268,7 @@ static JavaInspectorFactory kotlinJavaInspectorFactory() { // 'jar:file:...!/...' class file by the JAR'S FILE NAME looked up among the source-set names, and // sourceSetOf is what derives that name. A friendlier name makes every type in the jar off-classpath. SourceSet maddiAnnotation = SourceSetImpl.sourceSetOf(Immutable.class); - SourceSet kotlinStdlib = SourceSetImpl.sourceSetOf(kotlin.Lazy.class); + SourceSet kotlinStdlib = SourceSetImpl.sourceSetOf(Lazy.class); List classPath = List.of(javaBase, maddiAnnotation, kotlinStdlib); return new JavaInspectorFactory() { @@ -276,7 +297,7 @@ public JavaInspector withSources(SourceSet sourceSet) throws IOException { private static JavaInspectorFactory libraryJavaInspectorFactory(String packagePrefix, Class... anchors) { SourceSet javaBase = SourceSetImpl.javaBase(); SourceSet maddiAnnotation = SourceSetImpl.sourceSetOf(Immutable.class); - List libraries = java.util.Arrays.stream(anchors).map(SourceSetImpl::sourceSetOf).toList(); + List libraries = Arrays.stream(anchors).map(SourceSetImpl::sourceSetOf).toList(); List classPath = new ArrayList<>(List.of(javaBase, maddiAnnotation)); classPath.addAll(libraries); List dependencies = new ArrayList<>(List.of(maddiAnnotation)); diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/ComposeAnalysisHints.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/ComposeAnalysisHints.java index fd75103ee..5e9e4aa6e 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/ComposeAnalysisHints.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/ComposeAnalysisHints.java @@ -17,17 +17,26 @@ package io.codelaser.maddi.aapi.parser; +import java.io.File; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ch.qos.logback.classic.Level; import io.codelaser.maddi.annotation.Immutable; +import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.PropertyValueMap; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.Element; @@ -90,7 +99,7 @@ public static void main(String[] args) throws IOException, ClassNotFoundExceptio SourceSet maddiAnnotation = SourceSetImpl.sourceSetOf(Immutable.class); // comma-separated: the library's own class first, then one class of each jar its class files refer to // (vavr: io.vavr.Value,io.vavr.match.annotation.Patterns) - List libraries = new java.util.ArrayList<>(); + List libraries = new ArrayList<>(); for (String a : anchor.split(",")) libraries.add(SourceSetImpl.sourceSetOf(Class.forName(a.trim()))); JavaInspector javaInspector = new JavaInspectorImpl(); @@ -128,10 +137,10 @@ public static void main(String[] args) throws IOException, ClassNotFoundExceptio info -> info.access().isPublic()); String notes = System.getProperty("maddi.compose.notes"); if (notes != null && !notes.isBlank()) { - List rows = readExpectedRows(java.nio.file.Path.of(notes)); + List rows = readExpectedRows(Path.of(notes)); LOGGER.info("Read {} EXPECTED row(s) from {}", rows.size(), notes); - String report = java.nio.file.Path.of(notes).getFileName().toString(); - java.util.Set annotatedAsExpected = applyExpected(rows, primaryTypes); + String report = Path.of(notes).getFileName().toString(); + Set annotatedAsExpected = applyExpected(rows, primaryTypes); LOGGER.info("Annotated {} type(s) with their EXPECTED verdict", annotatedAsExpected.size()); composer.setTypeNotes(typeInfo -> rows.stream() .filter(r -> !r.isMemberRow() && r.matches(typeInfo.fullyQualifiedName())) @@ -147,7 +156,7 @@ public static void main(String[] args) throws IOException, ClassNotFoundExceptio // imports resolved from the main source set, which sees the whole class path: the jar's own source set sees // nothing, and star-import clashes (java.util.* vs io.vavr.collection.*) would go undetected // EXPLICIT decoration: hints written from a computed analysis must round-trip to it (see DecoratorImpl) - composer.write(apiTypes, new java.io.File(out), new DecoratorImpl(javaInspector.runtime(), + composer.write(apiTypes, new File(out), new DecoratorImpl(javaInspector.runtime(), javaInspector.mainSources(), dollarMap, preload != null && !preload.isBlank()), javaInspector.mainSources()); } @@ -156,7 +165,7 @@ public static void main(String[] args) throws IOException, ClassNotFoundExceptio The keys the hint decorator prints (DecoratorImpl), minus downcastParameter. Everything else in a source run's results is internal to the analysis. */ - private static final java.util.Set PUBLISHED_KEYS = java.util.Set.of("analyzerError", "commutableMethods", + private static final Set PUBLISHED_KEYS = Set.of("analyzerError", "commutableMethods", "containerType", "eventualMethod", "eventualParameter", "eventuallyFinalField", "eventuallyImmutableType", "eventuallyNonModifyingMethod", "eventuallyUnmodifiedParameter", "finalField", "finalizerMethod", "fluentMethod", "getSetEquivalent", "getSetField", "identityMethod", "ignoreModMethod", @@ -211,7 +220,7 @@ static ExpectedType parseExpectedType(String cell) { Boolean container = null; // null: not stated, keep the computed value boolean utilityClass = false; Value.Independent independent = null; - java.util.regex.Matcher m = java.util.regex.Pattern + Matcher m = Pattern .compile("^@(\\w+)(?:\\(([^)]*)\\))?\\s*").matcher(rest); while (!rest.isEmpty()) { m.reset(rest); @@ -260,8 +269,8 @@ Overwrite the loaded (computed) values with the report's EXPECTED ones, before t are at least hc-independent. The computed value stays visible in the type's comment. Returns the fully qualified names of the types that got their EXPECTED annotations. */ - static java.util.Set applyExpected(List rows, List primaryTypes) { - java.util.Set applied = new java.util.HashSet<>(); + static Set applyExpected(List rows, List primaryTypes) { + Set applied = new HashSet<>(); List allTypes = primaryTypes.stream().flatMap(TypeInfo::recursiveSubTypeStream).toList(); for (TypeInfo typeInfo : allTypes) { String fqn = typeInfo.fullyQualifiedName(); @@ -288,8 +297,8 @@ static java.util.Set applyExpected(List rows, List EVENTUAL_MEMBER_PROPERTIES = - java.util.Set.of(PropertyImpl.EVENTUAL_METHOD, PropertyImpl.EVENTUALLY_NON_MODIFYING_METHOD, + private static final Set EVENTUAL_MEMBER_PROPERTIES = + Set.of(PropertyImpl.EVENTUAL_METHOD, PropertyImpl.EVENTUALLY_NON_MODIFYING_METHOD, PropertyImpl.EVENTUAL_PARAMETER, PropertyImpl.EVENTUALLY_UNMODIFIED_PARAMETER); private static void applyExpectedType(TypeInfo typeInfo, ExpectedType expected) { @@ -333,9 +342,9 @@ private static void applyExpectedType(TypeInfo typeInfo, ExpectedType expected) } } - static List readExpectedRows(java.nio.file.Path report) throws IOException { - List rows = new java.util.ArrayList<>(); - for (String line : java.nio.file.Files.readAllLines(report)) { + static List readExpectedRows(Path report) throws IOException { + List rows = new ArrayList<>(); + for (String line : Files.readAllLines(report)) { if (!line.startsWith("| `")) continue; String[] cells = line.split("\\|"); if (cells.length < 5) continue; diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAnalysisHintsComposer.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAnalysisHintsComposer.java index 5a63cdb10..234ff12b1 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAnalysisHintsComposer.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestAnalysisHintsComposer.java @@ -57,7 +57,7 @@ public class TestAnalysisHintsComposer extends CommonTest { @BeforeAll public static void beforeAll() { - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)).setLevel(Level.INFO); + ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME)).setLevel(Level.INFO); ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger("io.codelaser.maddi.aapi")).setLevel(Level.DEBUG); } @@ -65,7 +65,7 @@ public static void beforeAll() { public void test() throws IOException, URISyntaxException { SourceSet javaBase = SourceSetImpl.javaBase(); SourceSet maddiSupport = SourceSetImpl.sourceSetOf(Immutable.class); - SourceSet slf4jApi = SourceSetImpl.sourceSetOf(org.slf4j.Logger.class); + SourceSet slf4jApi = SourceSetImpl.sourceSetOf(Logger.class); JavaInspector javaInspector = new io.codelaser.maddi.inspection.openjdk.JavaInspectorImpl(); javaInspector.preload("java.base::java.util"); diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestParseAnalyzeWrite.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestParseAnalyzeWrite.java index f9c120426..29bf84b9b 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestParseAnalyzeWrite.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/TestParseAnalyzeWrite.java @@ -102,7 +102,7 @@ public void test() throws IOException { // KotlinCollections, KotlinProperties, KotlinSequences, KotlinText) survive on 27 only. Measured on 27 (9 of 9) // and on the JDK 26 gate (4) before KotlinJvm; KotlinJvm and KotlinIoPath (2026-10-10) measured on 27 only, and // counted on 26 as KotlinReflect is. - int kotlinUnits = java.lang.Runtime.version().feature() >= 27 ? 11 : 6; + int kotlinUnits = Runtime.version().feature() >= 27 ? 11 : 6; // The hints of the libraries whose jar is not on the shared factory (the side-loaded libs/eclipsecollections, // 43 units naming org.eclipse.collections types; libs/guava, in libs.jar since 2026-10-12 but compiled through // its own factory, naming com.google.common.collect ones) are in the same position as the Kotlin ones: no library jar on the diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtil.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtil.java index f91971d71..8c618a7c7 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtil.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/archive/TestJavaUtil.java @@ -27,6 +27,7 @@ import static org.junit.jupiter.api.Assertions.*; import java.util.*; +import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; import org.junit.jupiter.api.Test; @@ -38,6 +39,8 @@ import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.type.ParameterizedType; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; public class TestJavaUtil extends CommonTest { @@ -69,7 +72,7 @@ public void testFunctionTypeParameters() { assertEquals("java.util.Collections.sort(java.util.List,java.util.Comparator)", sort.fullyQualifiedName()); assertSame(TRUE, sort.parameters().get(1).analysis().getOrDefault(IGNORE_MODIFICATIONS_PARAMETER, FALSE)); - TypeInfo completableFuture = compiledTypesManager().typeIfLoaded(java.util.concurrent.CompletableFuture.class); + TypeInfo completableFuture = compiledTypesManager().typeIfLoaded(CompletableFuture.class); MethodInfo runAsync = completableFuture.findUniqueMethod("runAsync", 2); assertSame(TRUE, runAsync.parameters().getFirst().analysis().getOrDefault(IGNORE_MODIFICATIONS_PARAMETER, FALSE)); assertSame(FALSE, runAsync.parameters().get(1).analysis().getOrDefault(IGNORE_MODIFICATIONS_PARAMETER, FALSE)); @@ -480,8 +483,8 @@ public void testHashMapEntryIterator() { public void testCollectionsUnmodifiableList() { TypeInfo collections = compiledTypesManager().typeIfLoaded(Collections.class); MethodInfo methodInfo = collections.findUniqueMethod("unmodifiableList", 1); - assertTrue(methodInfo.analysis().getOrDefault(io.codelaser.maddi.cst.impl.analysis.PropertyImpl.UNMODIFIABLE_VIEW_METHOD, - io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE).isTrue()); + assertTrue(methodInfo.analysis().getOrDefault(PropertyImpl.UNMODIFIABLE_VIEW_METHOD, + ValueImpl.BoolImpl.FALSE).isTrue()); assertSame(MUTABLE, methodInfo.analysis().getOrDefault(IMMUTABLE_METHOD, MUTABLE)); assertTrue(methodInfo.isNonModifying()); assertFalse(methodInfo.parameters().getFirst().isModified()); diff --git a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/example/popular/OrgSlf4J.java b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/example/popular/OrgSlf4J.java index 96ece3675..d1c969e81 100644 --- a/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/example/popular/OrgSlf4J.java +++ b/maddi-aapi-parser/src/test/java/io/codelaser/maddi/aapi/parser/example/popular/OrgSlf4J.java @@ -17,6 +17,9 @@ package io.codelaser.maddi.aapi.parser.example.popular; +import org.slf4j.ILoggerFactory; +import org.slf4j.Logger; + import io.codelaser.maddi.annotation.*; public class OrgSlf4J { @@ -62,7 +65,7 @@ interface ILoggerFactory$ { @NotNull @NotModified @ImmutableContainer - org.slf4j.Logger getLogger(String name); + Logger getLogger(String name); } @Container @@ -71,16 +74,16 @@ interface LoggerFactory$ { @NotNull @NotModified @ImmutableContainer - org.slf4j.Logger getLogger(@NotNull Class clazz); + Logger getLogger(@NotNull Class clazz); @NotNull @ImmutableContainer @NotModified - org.slf4j.Logger getLogger(@NotNull String string); + Logger getLogger(@NotNull String string); @NotNull @NotModified - org.slf4j.ILoggerFactory getILoggerFactory(); + ILoggerFactory getILoggerFactory(); } @Container diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/AnalysisProgressFeed.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/AnalysisProgressFeed.java index f1cceff6a..7d9009b55 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/AnalysisProgressFeed.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/AnalysisProgressFeed.java @@ -27,6 +27,7 @@ import java.nio.file.StandardOpenOption; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -84,7 +85,7 @@ public class AnalysisProgressFeed implements AnalysisValueFeed { // completed elements since the last wave barrier — ticked per element on parallel workers, so it must be // atomic. Added to elementsDone for display, giving smooth progress INSIDE a giant single-SCC wave (where // elementsDone would otherwise pin for the whole wave). Reset to 0 at each barrier, once folded in. - private final java.util.concurrent.atomic.AtomicInteger elementsInFlight = new java.util.concurrent.atomic.AtomicInteger(); + private final AtomicInteger elementsInFlight = new AtomicInteger(); private volatile boolean firstPassOngoing = true; private volatile boolean running = true; private long peakUsedBytes; diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/CheckpointWriter.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/CheckpointWriter.java index ea22296fd..b4bd4c13b 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/CheckpointWriter.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/CheckpointWriter.java @@ -20,9 +20,13 @@ import java.io.File; import java.io.IOException; import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; import java.util.Collection; +import java.util.Comparator; import java.util.LinkedHashSet; import java.util.Set; +import java.util.function.Supplier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -58,7 +62,7 @@ public class CheckpointWriter implements AnalysisValueFeed { private static final Logger LOGGER = LoggerFactory.getLogger(CheckpointWriter.class); private final Runtime runtime; - private final java.util.function.Supplier codecSupplier; + private final Supplier codecSupplier; private final File directory; private final long waveFlushIntervalMillis; private int typesWritten; @@ -75,11 +79,11 @@ public class CheckpointWriter implements AnalysisValueFeed { * whichever file first used the marker, and every other file's reference then fails decode * ('Cannot find $_ce0M'). A fresh codec per file makes each file self-contained. */ - public CheckpointWriter(Runtime runtime, java.util.function.Supplier codecSupplier, File directory) { + public CheckpointWriter(Runtime runtime, Supplier codecSupplier, File directory) { this(runtime, codecSupplier, directory, DEFAULT_WAVE_FLUSH_INTERVAL_MILLIS); } - public CheckpointWriter(Runtime runtime, java.util.function.Supplier codecSupplier, File directory, + public CheckpointWriter(Runtime runtime, Supplier codecSupplier, File directory, long waveFlushIntervalMillis) { this.runtime = runtime; this.codecSupplier = codecSupplier; @@ -135,15 +139,15 @@ private void write(Set primaries, String label) { for (TypeInfo primary : primaries) { Trie trie = new Trie<>(); trie.add(primary.fullyQualifiedName().split("\\."), primary); - java.nio.file.Path tmpDir = null; + Path tmpDir = null; try { tmpDir = Files.createTempDirectory(directory.toPath(), ".w"); new WriteAnalysisResults(runtime).write(tmpDir.toFile(), trie, codecSupplier.get()); try (var files = Files.walk(tmpDir).filter(p -> p.toString().endsWith(".json"))) { - for (java.nio.file.Path p : files.toList()) { + for (Path p : files.toList()) { Files.move(p, directory.toPath().resolve(p.getFileName()), - java.nio.file.StandardCopyOption.ATOMIC_MOVE, - java.nio.file.StandardCopyOption.REPLACE_EXISTING); + StandardCopyOption.ATOMIC_MOVE, + StandardCopyOption.REPLACE_EXISTING); } } ok++; @@ -152,8 +156,8 @@ private void write(Set primaries, String label) { LOGGER.debug("Checkpoint skip {} after {}: {}", primary, label, e.toString()); } finally { if (tmpDir != null) { - try (var leftovers = Files.walk(tmpDir).sorted(java.util.Comparator.reverseOrder())) { - for (java.nio.file.Path p : leftovers.toList()) Files.deleteIfExists(p); + try (var leftovers = Files.walk(tmpDir).sorted(Comparator.reverseOrder())) { + for (Path p : leftovers.toList()) Files.deleteIfExists(p); } catch (IOException ignored) { // temp-dir cleanup is best-effort } diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/IteratingAnalyzer.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/IteratingAnalyzer.java index dfea66f7a..59faa53fe 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/IteratingAnalyzer.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/IteratingAnalyzer.java @@ -17,11 +17,16 @@ package io.codelaser.maddi.modification.analyzer; +import java.time.Duration; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Consumer; import io.codelaser.maddi.analysis.api.AnalysisValueFeed; import io.codelaser.maddi.cst.api.analysis.Message; import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.graph.G; import io.codelaser.maddi.modification.link.LinkComputer; public interface IteratingAnalyzer { @@ -126,7 +131,7 @@ default boolean nullabilityOpenWorld() { * can be the whole problem: the OpenSearch {@code G43} run spent 1 h 40 min in its first pass, where * {@link #maxIterations()} can never fire. */ - default java.time.Duration maxDuration() { + default Duration maxDuration() { return null; } } @@ -163,7 +168,7 @@ default void setValueFeed(AnalysisValueFeed feed) { * on Y, as built by ComputeCallGraph). Worklist narrowing (default ON; opt out with NOWORKLIST=1) then makes iterations 2+ only re-analyze elements * that changed in the previous iteration plus their dependents (reverse edges) — the worklist narrowing. */ - default void analyze(List analysisOrder, io.codelaser.maddi.graph.G dependencyGraph) { + default void analyze(List analysisOrder, G dependencyGraph) { analyze(analysisOrder, dependencyGraph, null); } @@ -171,7 +176,7 @@ default void analyze(List analysisOrder, io.codelaser.maddi.graph.G * The early cutoff of the next seeded {@link #analyze}: the previous generation's summaries of the seed's * elements, by fully qualified name; see {@code IteratingAnalyzerImpl.setPriorSummaries}. Default: ignored. */ - default void setPriorSummaries(java.util.Map priorSummaries) { + default void setPriorSummaries(Map priorSummaries) { // no-op } @@ -183,8 +188,8 @@ default void setPriorSummaries(java.util.Map priorSummaries) { * and defeat the skip). Elements the worklist never reaches keep whatever analysis they already hold (their * carried values). {@code null} ⇒ the normal full analysis. */ - default void analyze(List analysisOrder, io.codelaser.maddi.graph.G dependencyGraph, - java.util.Set initialDirty) { + default void analyze(List analysisOrder, G dependencyGraph, + Set initialDirty) { analyze(analysisOrder, dependencyGraph, initialDirty, null); } @@ -199,8 +204,8 @@ default void analyze(List analysisOrder, io.codelaser.maddi.graph.G * the {@code CROSS_TYPE_DERIVED} tier of a carried element (and drops it from its carried set). {@code null} ⇒ no * hook. Only consulted when {@code initialDirty != null}. */ - default void analyze(List analysisOrder, io.codelaser.maddi.graph.G dependencyGraph, - java.util.Set initialDirty, java.util.function.Consumer beforeFirstRecompute) { + default void analyze(List analysisOrder, G dependencyGraph, + Set initialDirty, Consumer beforeFirstRecompute) { analyze(analysisOrder, dependencyGraph); } @@ -212,7 +217,7 @@ default void analyze(List analysisOrder, io.codelaser.maddi.graph.G * the elements it analysed, the seed and whatever the worklist pulled in; {@link #messages()} are about these * only. Null after a cold analysis. */ - default java.util.Set lastScope() { + default Set lastScope() { return null; } } diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/SingleIterationAnalyzer.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/SingleIterationAnalyzer.java index 2459b3eaa..724d1b39c 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/SingleIterationAnalyzer.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/SingleIterationAnalyzer.java @@ -18,9 +18,12 @@ package io.codelaser.maddi.modification.analyzer; import java.util.List; +import java.util.Map; +import java.util.Set; import io.codelaser.maddi.cst.api.analysis.Message; import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; public interface SingleIterationAnalyzer { @@ -46,7 +49,7 @@ default void go(List analysisOrder, boolean activateCycleBreaking, boolean * shallow analysis of an abstract type's methods and fields, an abstract method without implementations) is * done for them too, whatever the pass. Holds for the next {@code go} only. */ - default void setFirstVisits(java.util.Set firstVisits) { + default void setFirstVisits(Set firstVisits) { } int propertiesChanged(); @@ -55,9 +58,9 @@ default void setFirstVisits(java.util.Set firstVisits) { * Summary-consumption edges discovered by the link computer (consumer read consumed's METHOD_LINKS * while computing its own links) — see LinkComputer.recordSummaryConsumption. Accumulated over the run. */ - default java.util.Map> consumedSummaries() { - return java.util.Map.of(); + default Map> consumedSummaries() { + return Map.of(); } /** @@ -65,14 +68,14 @@ java.util.Set> consumedSummaries() { * per-element counter-delta attribution united with the write-target attribution from TolerantWrite (which * also catches the link computer's on-demand recursion writing a CALLEE's summary mid-caller). */ - java.util.Set changedInfos(); + Set changedInfos(); /** * Worklist v2: only elements whose EXTERNALLY VISIBLE summary changed (method links/modification verdicts, * field/type verdicts) — the set whose dependents must be re-analyzed. Element-internal (statement-level) * changes are excluded: dependents cannot observe them. */ - java.util.Set summaryChangedInfos(); + Set summaryChangedInfos(); /** Findings (warnings/errors about the analyzed code) collected by all analyzers of this iteration. */ List messages(); diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/AbstractMethodAnalyzerImpl.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/AbstractMethodAnalyzerImpl.java index 23567bea4..1561bbde4 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/AbstractMethodAnalyzerImpl.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/AbstractMethodAnalyzerImpl.java @@ -31,9 +31,16 @@ import io.codelaser.maddi.cst.api.analysis.Message; import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.expression.Expression; +import io.codelaser.maddi.cst.api.expression.InlineConditional; +import io.codelaser.maddi.cst.api.expression.Lambda; +import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.ReturnStatement; +import io.codelaser.maddi.cst.api.variable.FieldReference; +import io.codelaser.maddi.cst.api.variable.This; import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.AbstractMethodAnalyzer; @@ -308,7 +315,7 @@ private void methodEventuallyNonModifying(Iterable concreteImplement // debug session sees one veto per attempt and has to iterate runs to enumerate them. This pre-pass // prints them all at once (site filter on the ABSTRACT method's FQN). if (EventualCluster.SITE_DEBUG && EventualCluster.siteDebugMatches(methodInfo.fullyQualifiedName())) { - java.util.List blockers = new java.util.ArrayList<>(); + List blockers = new ArrayList<>(); for (MethodInfo implementation : concreteImplementations) { Value.SetOfStrings s = implementation.analysis() .getOrDefault(EVENTUALLY_NON_MODIFYING_METHOD, ValueImpl.SetOfStringsImpl.EMPTY_SET); @@ -420,8 +427,8 @@ private static boolean delegatesWithinFamily(MethodInfo implementation, MethodIn boolean[] anyFamilyCall = {false}; implementation.methodBody().visit(e -> { if (!delegating[0]) return false; - if (e instanceof TypeInfo || e instanceof io.codelaser.maddi.cst.api.expression.Lambda) return false; - if (e instanceof io.codelaser.maddi.cst.api.statement.ReturnStatement rs) { + if (e instanceof TypeInfo || e instanceof Lambda) return false; + if (e instanceof ReturnStatement rs) { int kind = x(rs.expression(), family); if (kind == FAMILY) anyFamilyCall[0] = true; else if (kind == OTHER) delegating[0] = false; @@ -438,13 +445,13 @@ private static boolean delegatesWithinFamily(MethodInfo implementation, MethodIn // a returned expression: a call into the family, free of 'this', a conditional over those ('c ? Stream.of() : // x.names()', SwitchEntryImpl.variableStreamDoNotDescend), or anything else - private static int x(io.codelaser.maddi.cst.api.expression.Expression x, Set family) { + private static int x(Expression x, Set family) { if (x == null || x.isEmpty()) return OTHER; - if (x instanceof io.codelaser.maddi.cst.api.expression.MethodCall mc && inFamily(mc.methodInfo(), family) + if (x instanceof MethodCall mc && inFamily(mc.methodInfo(), family) && mc.parameterExpressions().stream().allMatch(AbstractMethodAnalyzerImpl::thisFree)) { return FAMILY; } - if (x instanceof io.codelaser.maddi.cst.api.expression.InlineConditional ic) { + if (x instanceof InlineConditional ic) { int t = x(ic.ifTrue(), family), f = x(ic.ifFalse(), family); if (t == OTHER || f == OTHER) return OTHER; return t == FAMILY || f == FAMILY ? FAMILY : THIS_FREE; @@ -456,10 +463,10 @@ private static boolean inFamily(MethodInfo callee, Set family) { return family.contains(callee) || callee.overrides().stream().anyMatch(family::contains); } - private static boolean thisFree(io.codelaser.maddi.cst.api.expression.Expression expression) { + private static boolean thisFree(Expression expression) { return expression.variableStreamDescend().noneMatch(v -> - v instanceof io.codelaser.maddi.cst.api.variable.This - || v instanceof io.codelaser.maddi.cst.api.variable.FieldReference fr && fr.scopeIsRecursivelyThis()); + v instanceof This + || v instanceof FieldReference fr && fr.scopeIsRecursivelyThis()); } /** diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/ContractResolution.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/ContractResolution.java index 77cc9a5c5..fe1e467ba 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/ContractResolution.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/ContractResolution.java @@ -19,6 +19,7 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.Value; @@ -129,7 +130,7 @@ public Outcome resolve(ParameterInfo parameterInfo, Property property) { }); } - private Outcome cached(Info info, Property property, java.util.function.Function compute) { + private Outcome cached(Info info, Property property, Function compute) { return cache.computeIfAbsent(info, _ -> new ConcurrentHashMap<>()).computeIfAbsent(property, compute); } @@ -139,7 +140,7 @@ private record Inherited(Value value, MethodInfo source) { } private Inherited strongestInherited(MethodInfo methodInfo, Property property, - java.util.function.Function contractOfParent) { + Function contractOfParent) { Inherited best = Inherited.NONE; for (MethodInfo parent : methodInfo.overrides()) { Value fromParent = contractOfParent.apply(parent); diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/DependentCulprit.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/DependentCulprit.java index 31cff2e67..45db8bf17 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/DependentCulprit.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/DependentCulprit.java @@ -19,6 +19,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.function.Predicate; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.Element; @@ -31,6 +32,7 @@ import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.expression.VariableExpression; import io.codelaser.maddi.cst.api.info.FieldInfo; +import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.statement.ReturnStatement; @@ -69,7 +71,7 @@ static void writeForGetter(MethodInfo methodInfo, FieldInfo field) { fieldStep(field)); } - private static void writeForReturn(MethodInfo methodInfo, java.util.function.Predicate reached, + private static void writeForReturn(MethodInfo methodInfo, Predicate reached, Value.Culprit.Step last) { if (methodInfo.methodBody() == null) return; List returns = new ArrayList<>(); @@ -133,7 +135,7 @@ private static Value.Culprit.Step fieldStep(MethodInfo methodInfo, Variable reac return Culprits.step(methodInfo, methodInfo, "captures " + reached.simpleName() + ", which is mutable"); } - private static void write(io.codelaser.maddi.cst.api.info.Info info, List steps) { + private static void write(Info info, List steps) { ValueImpl.CulpritImpl culprit = new ValueImpl.CulpritImpl(steps); if (info.analysis().haveAnalyzedValueFor(PropertyImpl.DEPENDENT_CULPRIT)) { info.analysis().overwrite(PropertyImpl.DEPENDENT_CULPRIT, culprit); @@ -143,7 +145,7 @@ private static void write(io.codelaser.maddi.cst.api.info.Info info, List variable) { + private static boolean mentions(Element element, Predicate variable) { boolean[] found = {false}; element.visit((Element e) -> { if (found[0]) return false; diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/DynamicImmutabilityInference.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/DynamicImmutabilityInference.java index d937bcda5..1cba2a033 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/DynamicImmutabilityInference.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/DynamicImmutabilityInference.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Consumer; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.expression.Assignment; @@ -235,7 +236,7 @@ private static void collectArgument(List parameterExpressions, Param * types. Both enumerations here need the same scope: it is the set of places that may touch a private * member, and — given the finality gate — the set of places that may assign a final field. */ - private static void forEachMethodOfPrimaryType(TypeInfo typeInfo, java.util.function.Consumer action) { + private static void forEachMethodOfPrimaryType(TypeInfo typeInfo, Consumer action) { typeInfo.primaryType().recursiveSubTypeStream() .flatMap(TypeInfo::constructorAndMethodStream) .filter(mi -> !mi.methodBody().isEmpty()) diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/EventualCluster.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/EventualCluster.java index 32a90abfe..42f4fcc8d 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/EventualCluster.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/EventualCluster.java @@ -17,9 +17,12 @@ package io.codelaser.maddi.modification.analyzer.impl; +import java.util.ArrayDeque; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -33,6 +36,7 @@ import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.prepwork.Util; /** * EXPERIMENTAL, gated on {@code EVENTUALCLUSTER=1}. Breaks the circular recognition that stops the {@code Info} @@ -158,7 +162,7 @@ public void noteHierarchy(TypeInfo typeInfo) { */ public boolean isGroundedInMark(TypeInfo start) { if (!ENABLED || groundedCache.contains(start)) return true; - java.util.ArrayDeque todo = new java.util.ArrayDeque<>(); + ArrayDeque todo = new ArrayDeque<>(); Set seen = new HashSet<>(); todo.add(start); seen.add(start); @@ -168,7 +172,7 @@ public boolean isGroundedInMark(TypeInfo start) { groundedCache.add(start); return true; } - java.util.List next = new java.util.ArrayList<>(); + List next = new ArrayList<>(); ParameterizedType parent = t.parentClass(); if (parent != null && parent.typeInfo() != null) next.add(parent.typeInfo()); for (ParameterizedType itf : t.interfacesImplemented()) { @@ -189,7 +193,7 @@ public boolean isGroundedInMark(TypeInfo start) { return false; } - private static void addTypeInfos(ParameterizedType pt, java.util.List out) { + private static void addTypeInfos(ParameterizedType pt, List out) { if (pt.typeInfo() != null) out.add(pt.typeInfo()); for (ParameterizedType p : pt.parameters()) addTypeInfos(p, out); } @@ -247,7 +251,7 @@ private boolean hasSetters(TypeInfo typeInfo) { private static boolean setterOrImplementedBySetter(MethodInfo methodInfo) { if (isSetter(methodInfo)) return true; - if (!io.codelaser.maddi.modification.prepwork.Util.unionOverImplementations(methodInfo)) return false; + if (!Util.unionOverImplementations(methodInfo)) return false; for (MethodInfo implementation : methodInfo.analysis() .getOrDefault(PropertyImpl.IMPLEMENTATIONS, ValueImpl.SetOfMethodInfoImpl.EMPTY) .methodInfoSet()) { @@ -349,7 +353,7 @@ public boolean treatAsEventuallyImmutable(TypeInfo member, TypeInfo candidate, V + " [" + debugContext.get() + "]"); } if (admissible) { - java.util.ArrayDeque> stack = assumptionBuffers.get(); + ArrayDeque> stack = assumptionBuffers.get(); if (!stack.isEmpty()) { // success-only witnessing: inside a buffered computation, the edge only reaches the ledger if // the computation lands its property -- a bailed attempt (retried next iteration, possibly @@ -384,8 +388,8 @@ private static boolean candidateDoomed(TypeInfo candidate) { } // per-thread stack of assumption buffers; the type loop runs computations in parallel, one per thread - private final ThreadLocal>> assumptionBuffers = - ThreadLocal.withInitial(java.util.ArrayDeque::new); + private final ThreadLocal>> assumptionBuffers = + ThreadLocal.withInitial(ArrayDeque::new); // log-only diagnostic (MODREACH_EXPLAIN style): print DIRECT assumption edges whose candidate FQN // matches any comma-separated substring -- the ledger the contraction walks is otherwise only visible @@ -503,7 +507,7 @@ public Map opaqueSignatureCache() { * {@link #commitAssumptionBuffer()} or {@link #discardAssumptionBuffer()}. No-op off the gate. */ public void beginAssumptionBuffer() { if (!ENABLED) return; - assumptionBuffers.get().push(new java.util.ArrayList<>()); + assumptionBuffers.get().push(new ArrayList<>()); } /** The buffered computation landed its property: its optimistic edges enter the ledger. */ diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/EventualClusterContraction.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/EventualClusterContraction.java index 6e5cfb79e..0e6aefa25 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/EventualClusterContraction.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/EventualClusterContraction.java @@ -22,6 +22,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -153,7 +154,7 @@ public static int retract(List analysisOrder, EventualCluster cluster) { for (TypeInfo t : retract) { Set assumed = assumptions.getOrDefault(t, Set.of()); String broken = assumed.stream().filter(c -> !discharged.contains(c)) - .map(TypeInfo::fullyQualifiedName).sorted().collect(java.util.stream.Collectors.joining(", ")); + .map(TypeInfo::fullyQualifiedName).sorted().collect(Collectors.joining(", ")); System.out.println("ECRETRACT " + t.fullyQualifiedName() + " <- broken: [" + broken + "] (cascade if empty)"); } diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/FieldAnalyzerImpl.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/FieldAnalyzerImpl.java index 946e6a5f8..4922baa2e 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/FieldAnalyzerImpl.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/FieldAnalyzerImpl.java @@ -7,6 +7,7 @@ import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.PART_OF_CONSTRUCTION; import java.util.List; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; @@ -22,7 +23,10 @@ import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.cst.api.type.ParameterizedType; +import io.codelaser.maddi.cst.api.variable.DependentVariable; import io.codelaser.maddi.cst.api.variable.FieldReference; +import io.codelaser.maddi.cst.api.variable.This; import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; @@ -259,7 +263,7 @@ private void composeThroughLocal(VariableData vd, Links.Builder builder, Link fi private Value.Bool computeUnmodified(FieldInfo fieldInfo, List methodsReferringToField, boolean structural) { // hidden content: the field is never modified, whatever is done to the object in it - if (io.codelaser.maddi.modification.prepwork.Util.isHiddenContentFieldDeclaration(fieldInfo)) return TRUE; + if (Util.isHiddenContentFieldDeclaration(fieldInfo)) return TRUE; Value.SetOfInfo poc = fieldInfo.owner().analysis().getOrDefault(PART_OF_CONSTRUCTION, EMPTY_PART_OF_CONSTRUCTION); boolean undecided = false; @@ -396,8 +400,8 @@ private Value.Independent computeIndependent(FieldInfo fieldInfo, Links links, b // (SliceFactory): what one link transports is the component. Read as the array, every // link into a map's keys or values was mutable content, and a Map of // immutable records made its field, and its type, @Dependent (2026-10-31) - io.codelaser.maddi.cst.api.type.ParameterizedType transported = - link.from() instanceof io.codelaser.maddi.cst.api.variable.DependentVariable dv + ParameterizedType transported = + link.from() instanceof DependentVariable dv ? Util.isSlice(dv) && dv.parameterizedType().arrays() > 0 ? dv.parameterizedType().copyWithOneFewerArrays() : dv.parameterizedType() @@ -435,11 +439,11 @@ passes a virtual field ('0:input.§$s', the content of a copied collection: the private static Variable realFieldPathRoot(Variable variable) { Variable current = variable; while (current instanceof FieldReference fr && fr.scopeVariable() != null - && !(fr.scopeVariable() instanceof io.codelaser.maddi.cst.api.variable.This)) { + && !(fr.scopeVariable() instanceof This)) { if (Util.virtual(fr.fieldInfo())) return null; current = fr.scopeVariable(); } - return current instanceof io.codelaser.maddi.cst.api.variable.DependentVariable ? null : current; + return current instanceof DependentVariable ? null : current; } /** @@ -470,6 +474,6 @@ private boolean escapesAsFunctionalInterface(MethodInfo privateMethod) { } // CST is stable for the analyzer run; safe to cache across iterations and fields - private final java.util.concurrent.ConcurrentHashMap fiEscapeCache = - new java.util.concurrent.ConcurrentHashMap<>(); + private final ConcurrentHashMap fiEscapeCache = + new ConcurrentHashMap<>(); } diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/GuardAnalyzerImpl.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/GuardAnalyzerImpl.java index 61f15da1e..3e786dd63 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/GuardAnalyzerImpl.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/GuardAnalyzerImpl.java @@ -28,6 +28,9 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.codelaser.maddi.annotation.Independent; import io.codelaser.maddi.cst.api.analysis.Message; import io.codelaser.maddi.cst.api.analysis.Property; @@ -112,7 +115,7 @@ public GuardAnalyzerImpl(Runtime runtime, IteratingAnalyzer.Configuration config this.contractResolution = new ContractResolution(runtime); } - private static final org.slf4j.Logger LOGGER = org.slf4j.LoggerFactory.getLogger(GuardAnalyzerImpl.class); + private static final Logger LOGGER = LoggerFactory.getLogger(GuardAnalyzerImpl.class); private int overridesWeakeningComputed; @Override @@ -922,7 +925,7 @@ private void guardOverride(MethodInfo methodInfo) { if (parent.typeInfo().compilationUnit().externalLibrary()) continue; // don't police library contracts Map contracts = contractReader.contracts(parent); if (!contracts.containsKey(NON_MODIFYING_METHOD) - && !io.codelaser.maddi.modification.prepwork.Util.unionOverImplementations(parent) + && !Util.unionOverImplementations(parent) && parent.isNonModifying() && methodInfo.isModifying()) { overridesWeakeningComputed++; analyzerMessages.add(MessageImpl.warn(methodInfo, OVERRIDE_WEAKENS_COMPUTED, diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/IteratingAnalyzerImpl.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/IteratingAnalyzerImpl.java index e7cf5666f..2c25f4c2c 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/IteratingAnalyzerImpl.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/IteratingAnalyzerImpl.java @@ -17,24 +17,52 @@ package io.codelaser.maddi.modification.analyzer.impl; +import java.io.IOException; +import java.io.PrintWriter; import java.time.Duration; import java.time.Instant; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; +import java.util.function.Consumer; +import java.util.function.Predicate; import java.util.stream.Stream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import io.codelaser.maddi.analysis.api.AnalysisValueFeed; +import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.cst.api.analysis.Message; +import io.codelaser.maddi.cst.api.element.ModuleInfo; +import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.ConsumptionEdgeRecorder; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.graph.G; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.modification.analyzer.CycleBreakingStrategy; import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; import io.codelaser.maddi.modification.analyzer.SingleIterationAnalyzer; +import io.codelaser.maddi.modification.analyzer.nullability.NullabilityPass; import io.codelaser.maddi.modification.analyzer.nullability.Policy; import io.codelaser.maddi.modification.analyzer.nullability.World; +import io.codelaser.maddi.modification.analyzer.shadow.ShadowModificationPass; +import io.codelaser.maddi.modification.common.util.Culprits; import io.codelaser.maddi.modification.common.util.TolerantWrite; +import io.codelaser.maddi.modification.link.impl.Gate; +import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; public class IteratingAnalyzerImpl extends CommonAnalyzerImpl implements IteratingAnalyzer { private static final Logger LOGGER = LoggerFactory.getLogger(IteratingAnalyzerImpl.class); @@ -58,15 +86,15 @@ public class IteratingAnalyzerImpl extends CommonAnalyzerImpl implements Iterati // ModificationAnalysisResource#incrementalAnalyze. private boolean certifiedWithoutFrozenValues; /* the scope of the last seeded analysis, see lastScope(); null after a cold one */ - private java.util.Set lastScope; + private Set lastScope; // how many reachability rounds threw and were skipped: the run goes on with the fixpoint's verdicts, so without // this count a corpus A/B of a MODREACH change compares fixpoint verdicts on both sides (CodeLaser/maddi-mod#75) private int modReachFailures; - private io.codelaser.maddi.analysis.api.AnalysisValueFeed valueFeed; + private AnalysisValueFeed valueFeed; @Override - public void setValueFeed(io.codelaser.maddi.analysis.api.AnalysisValueFeed feed) { + public void setValueFeed(AnalysisValueFeed feed) { this.valueFeed = feed; } @@ -76,14 +104,14 @@ public void setValueFeed(io.codelaser.maddi.analysis.api.AnalysisValueFeed feed) // no syntactic call edge) is not in the fresh call graph, and in incremental mode there is no // verification pass to catch the resulting stale value — the persisted edge wakes the // consumer directly. - private java.util.Map> externalWakeEdges; + private Map> externalWakeEdges; - public void setExternalWakeEdges(java.util.Map> externalWakeEdges) { + public void setExternalWakeEdges(Map> externalWakeEdges) { this.externalWakeEdges = externalWakeEdges; } // feed exceptions must never disturb the analysis - private void feed(java.util.function.Consumer action) { + private void feed(Consumer action) { if (valueFeed != null) { try { action.accept(valueFeed); @@ -213,31 +241,31 @@ public Configuration build() { * not-null) are modification-independent and stay; the three modification properties are frozen. */ private static int clearDerivedFamily(List analysisOrder) { - java.util.Set keys = new java.util.HashSet<>(java.util.Set.of( - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE.key(), - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_TYPE.key(), - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.CONTAINER_TYPE.key(), - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_FIELD.key(), - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_FIELD.key(), - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_METHOD.key(), - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_METHOD.key(), - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_PARAMETER.key(), - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_PARAMETER.key(), - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.CONTAINER_METHOD.key(), - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.CONTAINER_PARAMETER.key(), - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.CONTAINER_FIELD.key(), - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.UNMODIFIABLE_TYPE.key(), - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.UNMODIFIABLE_VIEW_METHOD.key())); + Set keys = new HashSet<>(Set.of( + PropertyImpl.IMMUTABLE_TYPE.key(), + PropertyImpl.INDEPENDENT_TYPE.key(), + PropertyImpl.CONTAINER_TYPE.key(), + PropertyImpl.IMMUTABLE_FIELD.key(), + PropertyImpl.INDEPENDENT_FIELD.key(), + PropertyImpl.IMMUTABLE_METHOD.key(), + PropertyImpl.INDEPENDENT_METHOD.key(), + PropertyImpl.IMMUTABLE_PARAMETER.key(), + PropertyImpl.INDEPENDENT_PARAMETER.key(), + PropertyImpl.CONTAINER_METHOD.key(), + PropertyImpl.CONTAINER_PARAMETER.key(), + PropertyImpl.CONTAINER_FIELD.key(), + PropertyImpl.UNMODIFIABLE_TYPE.key(), + PropertyImpl.UNMODIFIABLE_VIEW_METHOD.key())); if (EventualCluster.ENABLED) { // EVENTUALCLUSTER: the eventual layer derives from modification exactly like the immutability // family. Computed pre-cutover, an abstract enm union freezes on optimistic TRUEs and survives // the downgrade (the measured Element.complexity race: honest 9-label vs stale 2-label union // depending on the run). Clear it with the family; contracts re-materialize on the next pass, // and the cluster ledger is reset alongside (the witnessed edges belong to cleared computations). - keys.add(io.codelaser.maddi.cst.impl.analysis.PropertyImpl.EVENTUAL_METHOD.key()); - keys.add(io.codelaser.maddi.cst.impl.analysis.PropertyImpl.EVENTUALLY_NON_MODIFYING_METHOD.key()); - keys.add(io.codelaser.maddi.cst.impl.analysis.PropertyImpl.EVENTUALLY_UNMODIFIED_PARAMETER.key()); - keys.add(io.codelaser.maddi.cst.impl.analysis.PropertyImpl.EVENTUALLY_IMMUTABLE_TYPE.key()); + keys.add(PropertyImpl.EVENTUAL_METHOD.key()); + keys.add(PropertyImpl.EVENTUALLY_NON_MODIFYING_METHOD.key()); + keys.add(PropertyImpl.EVENTUALLY_UNMODIFIED_PARAMETER.key()); + keys.add(PropertyImpl.EVENTUALLY_IMMUTABLE_TYPE.key()); } int[] cleared = {0}; for (Info info : analysisOrder) { @@ -246,8 +274,8 @@ private static int clearDerivedFamily(List analysisOrder) { if (remove) cleared[0]++; return remove; }); - if (info instanceof io.codelaser.maddi.cst.api.info.MethodInfo mi) { - for (io.codelaser.maddi.cst.api.info.ParameterInfo pi : mi.parameters()) { + if (info instanceof MethodInfo mi) { + for (ParameterInfo pi : mi.parameters()) { pi.analysis().removeIf(p -> { boolean remove = keys.contains(p.key()); if (remove) cleared[0]++; @@ -268,11 +296,11 @@ private static int clearDerivedFamily(List analysisOrder) { * re-derivation passes; contracts re-materialize exactly as after {@link #clearDerivedFamily}. */ private static int clearEventualFamily(List analysisOrder) { - java.util.Set keys = java.util.Set.of( - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.EVENTUAL_METHOD.key(), - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.EVENTUALLY_NON_MODIFYING_METHOD.key(), - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.EVENTUALLY_UNMODIFIED_PARAMETER.key(), - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.EVENTUALLY_IMMUTABLE_TYPE.key()); + Set keys = Set.of( + PropertyImpl.EVENTUAL_METHOD.key(), + PropertyImpl.EVENTUALLY_NON_MODIFYING_METHOD.key(), + PropertyImpl.EVENTUALLY_UNMODIFIED_PARAMETER.key(), + PropertyImpl.EVENTUALLY_IMMUTABLE_TYPE.key()); int[] cleared = {0}; for (Info info : analysisOrder) { info.analysis().removeIf(p -> { @@ -280,8 +308,8 @@ private static int clearEventualFamily(List analysisOrder) { if (remove) cleared[0]++; return remove; }); - if (info instanceof io.codelaser.maddi.cst.api.info.MethodInfo mi) { - for (io.codelaser.maddi.cst.api.info.ParameterInfo pi : mi.parameters()) { + if (info instanceof MethodInfo mi) { + for (ParameterInfo pi : mi.parameters()) { pi.analysis().removeIf(p -> { boolean remove = keys.contains(p.key()); if (remove) cleared[0]++; @@ -298,20 +326,20 @@ private static int clearEventualFamily(List analysisOrder) { * all analysis-order elements. Two runs with identical fingerprints (very likely) computed identical verdicts. */ private static void logVerdictFingerprint(List analysisOrder) { - java.util.Map counts = new java.util.TreeMap<>(); + Map counts = new TreeMap<>(); for (Info info : analysisOrder) { String key; - if (info instanceof io.codelaser.maddi.cst.api.info.MethodInfo) { - var v = info.analysis().getOrNull(io.codelaser.maddi.cst.impl.analysis.PropertyImpl.NON_MODIFYING_METHOD, - io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.class); + if (info instanceof MethodInfo) { + var v = info.analysis().getOrNull(PropertyImpl.NON_MODIFYING_METHOD, + ValueImpl.BoolImpl.class); key = "method.nonModifying=" + (v == null ? "?" : v); - } else if (info instanceof io.codelaser.maddi.cst.api.info.FieldInfo) { - var v = info.analysis().getOrNull(io.codelaser.maddi.cst.impl.analysis.PropertyImpl.UNMODIFIED_FIELD, - io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.class); + } else if (info instanceof FieldInfo) { + var v = info.analysis().getOrNull(PropertyImpl.UNMODIFIED_FIELD, + ValueImpl.BoolImpl.class); key = "field.unmodified=" + (v == null ? "?" : v); - } else if (info instanceof io.codelaser.maddi.cst.api.info.TypeInfo) { - var v = info.analysis().getOrNull(io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE, - io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.class); + } else if (info instanceof TypeInfo) { + var v = info.analysis().getOrNull(PropertyImpl.IMMUTABLE_TYPE, + ValueImpl.ImmutableImpl.class); key = "type.immutable=" + (v == null ? "?" : v); } else { key = "other"; @@ -320,82 +348,82 @@ private static void logVerdictFingerprint(List analysisOrder) { } LOGGER.info("Verdict fingerprint: {}", counts); if (System.getenv("VL2OTIER") != null) { - LOGGER.info(io.codelaser.maddi.modification.link.impl.LinkComputerImpl.vl2oTierStats()); + LOGGER.info(LinkComputerImpl.vl2oTierStats()); } // task #35 Phase A: consumption-edge sparsity report (CONSEDGES gate; GO/NO-GO for the // giant-SCC incremental design, see DESIGN-incremental-v2.md) - if (io.codelaser.maddi.cst.impl.analysis.ConsumptionEdgeRecorder.ENABLED) { - LOGGER.info(io.codelaser.maddi.cst.impl.analysis.ConsumptionEdgeRecorder.statistics()); + if (ConsumptionEdgeRecorder.ENABLED) { + LOGGER.info(ConsumptionEdgeRecorder.statistics()); } String dump = System.getenv("FPDUMP"); if (dump != null) { - try (java.io.PrintWriter pw = new java.io.PrintWriter(dump)) { + try (PrintWriter pw = new PrintWriter(dump)) { for (Info info : analysisOrder) { String v; - if (info instanceof io.codelaser.maddi.cst.api.info.MethodInfo) { - var b = info.analysis().getOrNull(io.codelaser.maddi.cst.impl.analysis.PropertyImpl.NON_MODIFYING_METHOD, - io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.class); - var gs = info.analysis().getOrNull(io.codelaser.maddi.cst.impl.analysis.PropertyImpl.GET_SET_FIELD, - io.codelaser.maddi.cst.impl.analysis.ValueImpl.GetSetValueImpl.class); + if (info instanceof MethodInfo) { + var b = info.analysis().getOrNull(PropertyImpl.NON_MODIFYING_METHOD, + ValueImpl.BoolImpl.class); + var gs = info.analysis().getOrNull(PropertyImpl.GET_SET_FIELD, + ValueImpl.GetSetValueImpl.class); String getset = gs != null && gs.field() != null ? " getset=" + gs.field().name() + (gs.setter() ? "(set)" : "(get)") : ""; // eventual-cluster diagnostic: the after-mark non-modification label (why a read-through // accessor is excused after the mark) and the @Mark/@Only verdict, to see why an interface // does or does not surface an eventual type-level verdict - var enm = info.analysis().getOrNull(io.codelaser.maddi.cst.impl.analysis.PropertyImpl.EVENTUALLY_NON_MODIFYING_METHOD, - io.codelaser.maddi.cst.impl.analysis.ValueImpl.SetOfStringsImpl.class); + var enm = info.analysis().getOrNull(PropertyImpl.EVENTUALLY_NON_MODIFYING_METHOD, + ValueImpl.SetOfStringsImpl.class); String evNonMod = enm != null && !enm.set().isEmpty() - ? " eventuallyNonMod=" + new java.util.TreeSet<>(enm.set()) : ""; - var evm = info.analysis().getOrNull(io.codelaser.maddi.cst.impl.analysis.PropertyImpl.EVENTUAL_METHOD, - io.codelaser.maddi.cst.impl.analysis.ValueImpl.EventualImpl.class); + ? " eventuallyNonMod=" + new TreeSet<>(enm.set()) : ""; + var evm = info.analysis().getOrNull(PropertyImpl.EVENTUAL_METHOD, + ValueImpl.EventualImpl.class); String evMethod = evm != null && evm.isEventual() ? " eventual=" + evm : ""; v = "method nonModifying=" + b + getset + evNonMod + evMethod; - } else if (info instanceof io.codelaser.maddi.cst.api.info.FieldInfo) { - var b = info.analysis().getOrNull(io.codelaser.maddi.cst.impl.analysis.PropertyImpl.UNMODIFIED_FIELD, - io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.class); - var ind = info.analysis().getOrNull(io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_FIELD, - io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.class); - var igm = info.analysis().getOrNull(io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IGNORE_MODIFICATIONS_FIELD, - io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.class); + } else if (info instanceof FieldInfo) { + var b = info.analysis().getOrNull(PropertyImpl.UNMODIFIED_FIELD, + ValueImpl.BoolImpl.class); + var ind = info.analysis().getOrNull(PropertyImpl.INDEPENDENT_FIELD, + ValueImpl.IndependentImpl.class); + var igm = info.analysis().getOrNull(PropertyImpl.IGNORE_MODIFICATIONS_FIELD, + ValueImpl.BoolImpl.class); v = "field unmodified=" + b + " independent=" + ind + " ignoreMod=" + igm; - } else if (info instanceof io.codelaser.maddi.cst.api.info.TypeInfo) { - var b = info.analysis().getOrNull(io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE, - io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.class); - var ev = info.analysis().getOrNull(io.codelaser.maddi.cst.impl.analysis.PropertyImpl.EVENTUALLY_IMMUTABLE_TYPE, - io.codelaser.maddi.cst.impl.analysis.ValueImpl.EventuallyImmutableImpl.class); - var ind = info.analysis().getOrNull(io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_TYPE, - io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.class); + } else if (info instanceof TypeInfo) { + var b = info.analysis().getOrNull(PropertyImpl.IMMUTABLE_TYPE, + ValueImpl.ImmutableImpl.class); + var ev = info.analysis().getOrNull(PropertyImpl.EVENTUALLY_IMMUTABLE_TYPE, + ValueImpl.EventuallyImmutableImpl.class); + var ind = info.analysis().getOrNull(PropertyImpl.INDEPENDENT_TYPE, + ValueImpl.IndependentImpl.class); v = "type immutable=" + b + " eventual=" + ev + " independent=" + ind; } else continue; pw.println(v + " " + info.fullyQualifiedName()); // FPDUMP_PARAMS: parameter-level lines (separate gate so the A/B corpus format is unchanged) if (System.getenv("FPDUMP_PARAMS") != null - && info instanceof io.codelaser.maddi.cst.api.info.MethodInfo mi) { - for (io.codelaser.maddi.cst.api.info.ParameterInfo pi : mi.parameters()) { + && info instanceof MethodInfo mi) { + for (ParameterInfo pi : mi.parameters()) { var um = pi.analysis().getOrNull( - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.UNMODIFIED_PARAMETER, - io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.class); + PropertyImpl.UNMODIFIED_PARAMETER, + ValueImpl.BoolImpl.class); var ind = pi.analysis().getOrNull( - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_PARAMETER, - io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.class); + PropertyImpl.INDEPENDENT_PARAMETER, + ValueImpl.IndependentImpl.class); var eup = pi.analysis().getOrNull( - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.EVENTUALLY_UNMODIFIED_PARAMETER, - io.codelaser.maddi.cst.impl.analysis.ValueImpl.SetOfStringsImpl.class); + PropertyImpl.EVENTUALLY_UNMODIFIED_PARAMETER, + ValueImpl.SetOfStringsImpl.class); String evUnmod = eup != null && !eup.set().isEmpty() - ? " eventuallyUnmod=" + new java.util.TreeSet<>(eup.set()) : ""; + ? " eventuallyUnmod=" + new TreeSet<>(eup.set()) : ""; pw.println("param unmodified=" + um + " independent=" + ind + evUnmod + " " + pi.fullyQualifiedName()); } } } - } catch (java.io.IOException e) { + } catch (IOException e) { LOGGER.error("FPDUMP failed", e); } } } @Override - public java.util.Set lastScope() { + public Set lastScope() { return lastScope; } @@ -416,7 +444,7 @@ public boolean certifiedWithoutFrozenValues() { return certifiedWithoutFrozenValues; } - private java.util.Map priorSummaries; + private Map priorSummaries; private boolean cutoffFellBack; /** Whether the last seeded {@link #analyze} with prior summaries fell back to the cold analysis. */ @@ -433,7 +461,7 @@ public boolean cutoffFellBack() { * change reaches, from carried values, settles elsewhere than a cold run does. Read by the next {@link #analyze}. */ @Override - public void setPriorSummaries(java.util.Map priorSummaries) { + public void setPriorSummaries(Map priorSummaries) { this.priorSummaries = priorSummaries; } @@ -456,40 +484,40 @@ public void analyze(List analysisOrder) { // CodeLaser/maddi-mod#76: a MODREACH round that only strengthened re-derives through the worklist instead of // clearing the derived family. Gate NOINCREDERIVE restores the full clear (the A/B baseline). private static final boolean INCREMENTAL_REDERIVATION = - !io.codelaser.maddi.modification.link.impl.Gate.isSet("NOINCREDERIVE"); + !Gate.isSet("NOINCREDERIVE"); @Override - public void analyze(List analysisOrder, io.codelaser.maddi.graph.G dependencyGraph) { + public void analyze(List analysisOrder, G dependencyGraph) { analyze(analysisOrder, dependencyGraph, null, null); } @Override - public void analyze(List analysisOrder, io.codelaser.maddi.graph.G dependencyGraph, - java.util.Set initialDirty) { + public void analyze(List analysisOrder, G dependencyGraph, + Set initialDirty) { analyze(analysisOrder, dependencyGraph, initialDirty, null); } @Override - public void analyze(List analysisOrder, io.codelaser.maddi.graph.G dependencyGraph, - java.util.Set initialDirty, java.util.function.Consumer beforeFirstRecompute) { + public void analyze(List analysisOrder, G dependencyGraph, + Set initialDirty, Consumer beforeFirstRecompute) { iterate(analysisOrder, dependencyGraph, initialDirty, beforeFirstRecompute); if (configuration.nullability()) { // docs/design/nullability.md M3/B2: one-shot, over the converged link facts. The stored verdicts are the // Java annotations' (NullabilityDecorator): a parameter its method needs non-null is @NonNull, which // changes nothing at run time (CodeLaser/maddi#125) - var policy = io.codelaser.maddi.modification.analyzer.nullability.Policy.NULL_MARKED + var policy = Policy.NULL_MARKED .withPreconditionsNonNull(); if (configuration.nullabilityOpenWorld()) { - policy = policy.withWorld(io.codelaser.maddi.modification.analyzer.nullability.World.OPEN); + policy = policy.withWorld(World.OPEN); } feed(f -> f.stage("nullability")); - var pass = new io.codelaser.maddi.modification.analyzer.nullability.NullabilityPass(policy); - io.codelaser.maddi.modification.analyzer.nullability.NullabilityPass.write(pass.go(analysisOrder)); + var pass = new NullabilityPass(policy); + NullabilityPass.write(pass.go(analysisOrder)); } } - private void iterate(List analysisOrder, io.codelaser.maddi.graph.G dependencyGraph, - java.util.Set initialDirty, java.util.function.Consumer beforeFirstRecompute) { + private void iterate(List analysisOrder, G dependencyGraph, + Set initialDirty, Consumer beforeFirstRecompute) { // incremental (early-cutoff) mode: seed the worklist with initialDirty and stop the moment it runs dry, // WITHOUT the full verification / cycle-breaking passes — those re-touch the untouched (carried) elements // and would defeat the skip. See docs/design/analysis-rewiring.md and IteratingAnalyzer#analyze(List,G,Set). @@ -502,15 +530,15 @@ private void iterate(List analysisOrder, io.codelaser.maddi.graph.G // checkpoint (the changed types' OLD values), which must be cleared like any carried element's; on fresh // source the clear is a no-op (docs/design/incremental-and-overlay.md §1, "stale values on the seed"). Also // the scope of the incremental verification pass and cycle breaking: see scopePass. - java.util.Set everAnalyzed = incremental ? new java.util.HashSet<>() : java.util.Set.of(); - this.lastScope = incremental ? java.util.Collections.unmodifiableSet(everAnalyzed) : null; + Set everAnalyzed = incremental ? new HashSet<>() : Set.of(); + this.lastScope = incremental ? Collections.unmodifiableSet(everAnalyzed) : null; // the early cutoff (setPriorSummaries): the worklist stays inside the seed, and a seed element whose change // would reach outside it waits in 'pending' until the seed is certified; see the cutoff block below - java.util.Map priors = priorSummaries; + Map priors = priorSummaries; priorSummaries = null; boolean cutoff = incremental && priors != null; - java.util.Set cutoffScope = cutoff ? java.util.Set.copyOf(initialDirty) : java.util.Set.of(); - java.util.Set pending = new java.util.HashSet<>(); + Set cutoffScope = cutoff ? Set.copyOf(initialDirty) : Set.of(); + Set pending = new HashSet<>(); if (cutoff) cutoffFellBack = false; int iterations = 0; int maxIterations = configuration.maxIterations(); // extended per MODREACH re-derivation round @@ -533,7 +561,7 @@ private void iterate(List analysisOrder, io.codelaser.maddi.graph.G // wave-barrier above fires only once (at the end). Method ref = no per-element allocation; feed() // keeps the exception-swallowing contract. Runs on parallel workers, so the feed must be cheap. sia.setElementCompletedCallback(() -> - feed(io.codelaser.maddi.analysis.api.AnalysisValueFeed::elementCompleted)); + feed(AnalysisValueFeed::elementCompleted)); } // a stale warm-up window from a previous run on the same universe (the seeded incremental entry // point) would withhold this run's type-level writes: close it before the first iteration @@ -543,7 +571,7 @@ private void iterate(List analysisOrder, io.codelaser.maddi.graph.G boolean cycleBreakingActive = false; int previousPropertiesChanged = Integer.MAX_VALUE; // reverse adjacency: dependersOf(Y) = { X | X depends on Y } — the elements to re-analyze when Y changes - java.util.Map> dependersOf; + Map> dependersOf; if (WORKLIST && dependencyGraph != null) { // SYMMETRIC closure: the analyzers' true information flow runs along graph edges in BOTH // directions — the AbstractMethodAnalyzer derives an abstract method's verdicts from its @@ -552,24 +580,24 @@ private void iterate(List analysisOrder, io.codelaser.maddi.graph.G // 23 field verdicts at conservative values (fpdump diffs, runs 16-18). Symmetric is a correct // superset wherever the graph has at least one edge per real dependency; tighten later if the // dirty-set growth ever matters (late-iteration sets are tiny). - dependersOf = new java.util.HashMap<>(); + dependersOf = new HashMap<>(); dependencyGraph.edgeStream().forEach(e -> { - dependersOf.computeIfAbsent(e.to().t(), _ -> new java.util.HashSet<>()).add(e.from().t()); - dependersOf.computeIfAbsent(e.from().t(), _ -> new java.util.HashSet<>()).add(e.to().t()); + dependersOf.computeIfAbsent(e.to().t(), _ -> new HashSet<>()).add(e.from().t()); + dependersOf.computeIfAbsent(e.from().t(), _ -> new HashSet<>()).add(e.to().t()); }); // overrides may span source sets beyond the graph's vertex subset: keep the explicit relation for (Info info : analysisOrder) { - if (info instanceof io.codelaser.maddi.cst.api.info.MethodInfo mi) { - for (io.codelaser.maddi.cst.api.info.MethodInfo overridden : mi.overrides()) { - dependersOf.computeIfAbsent(mi, _ -> new java.util.HashSet<>()).add(overridden); - dependersOf.computeIfAbsent(overridden, _ -> new java.util.HashSet<>()).add(mi); + if (info instanceof MethodInfo mi) { + for (MethodInfo overridden : mi.overrides()) { + dependersOf.computeIfAbsent(mi, _ -> new HashSet<>()).add(overridden); + dependersOf.computeIfAbsent(overridden, _ -> new HashSet<>()).add(mi); } } } if (externalWakeEdges != null) { int added = 0; for (var e : externalWakeEdges.entrySet()) { - java.util.Set deps = dependersOf.computeIfAbsent(e.getKey(), _ -> new java.util.HashSet<>()); + Set deps = dependersOf.computeIfAbsent(e.getKey(), _ -> new HashSet<>()); for (Info consumer : e.getValue()) { if (deps.add(consumer)) added++; } @@ -580,17 +608,17 @@ private void iterate(List analysisOrder, io.codelaser.maddi.graph.G } else { dependersOf = null; } - java.util.Set dirty = initialDirty; // null = analyze everything; a seed = incremental early-cutoff - java.util.Set orderSet = java.util.Set.copyOf(analysisOrder); + Set dirty = initialDirty; // null = analyze everything; a seed = incremental early-cutoff + Set orderSet = Set.copyOf(analysisOrder); boolean verifying = false; // worklist ran dry -> one full pass certifies (0 changes = true fixpoint) // for the feed's passStarted: why the next pass runs, when its dirty set and flags do not say it String nextPassKind = incremental ? "incremental" : null; // strata-parallel first iteration (PARALLEL=n): dependency waves from the same call graph - java.util.List>> firstIterationWaves; + List>> firstIterationWaves; if (SingleIterationAnalyzerImpl.PARALLEL_THREADS > 1 && dependencyGraph != null && (incremental ? initialDirty.size() : analysisOrder.size()) >= SingleIterationAnalyzerImpl.MIN_ELEMENTS_FOR_PARALLEL) { - java.util.List>> waves = io.codelaser.maddi.callgraph.ComputeAnalysisOrder + List>> waves = ComputeAnalysisOrder .waves(dependencyGraph); // incremental: the seed's first pass runs as a cold first iteration does, over the seed only. The // sequential fallback recursed into the seed's cleared callees in another order, and tripped the link @@ -610,7 +638,7 @@ private void iterate(List analysisOrder, io.codelaser.maddi.graph.G if (dirty == null) { subset = analysisOrder; } else { - java.util.Set d = dirty; + Set d = dirty; subset = analysisOrder.stream().filter(d::contains).toList(); LOGGER.info("Worklist: {} of {} elements dirty", subset.size(), analysisOrder.size()); } @@ -630,7 +658,7 @@ private void iterate(List analysisOrder, io.codelaser.maddi.graph.G // clear-before-recompute: newly-dirtied elements (never analysed before in this run) may be carried // types whose stale cross-type-derived values must be cleared before the fresh, possibly-lowering // re-analysis. Fire the hook once per element, before it enters go(). - java.util.Set firstVisits = new java.util.HashSet<>(); + Set firstVisits = new HashSet<>(); for (Info info : subset) { if (everAnalyzed.add(info)) { firstVisits.add(info); @@ -656,7 +684,7 @@ private void iterate(List analysisOrder, io.codelaser.maddi.graph.G feed(f -> f.passCompleted(it, fullPass, analyzed)); } // convergence diagnosis: which properties are still moving? (value-changing writes per property) - java.util.Map changeCounts = TolerantWrite.changeCounts(); + Map changeCounts = TolerantWrite.changeCounts(); String topChanges = changeCounts.entrySet().stream() .filter(e -> !e.getKey().startsWith(TolerantWrite.RECOMPUTED)) .sorted((a, b) -> Long.compare(b.getValue(), a.getValue())) @@ -698,7 +726,7 @@ private void iterate(List analysisOrder, io.codelaser.maddi.graph.G // to the change count, so "no changes" can certify prematurely-frozen optimistic values. Surface // them; setting STRICTCERT (PRESENCE-only, any value — house convention for all engine gates) // additionally refuses certification (the run then ends at maxIterations, honestly uncertified). - java.util.Map refused = TolerantWrite.refusedDowngrades(); + Map refused = TolerantWrite.refusedDowngrades(); long refusedSum = refused.values().stream().mapToLong(Long::longValue).sum(); if (done && !refused.isEmpty()) { LOGGER.error("Certification reached with {} refused downgrade attempt(s) — frozen optimistic " @@ -716,10 +744,10 @@ private void iterate(List analysisOrder, io.codelaser.maddi.graph.G if (done && !cycleBreakingActive && System.getenv("NOCYCLEBREAKING") == null) { // incremental: the scope this run touched, see scopePass long undecided = (incremental ? scopePass(everAnalyzed, analysisOrder) : analysisOrder).stream() - .filter(i -> i instanceof io.codelaser.maddi.cst.api.info.TypeInfo t + .filter(i -> i instanceof TypeInfo t && t.analysis().getOrNull( - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMMUTABLE_TYPE, - io.codelaser.maddi.cst.impl.analysis.ValueImpl.ImmutableImpl.class) == null) + PropertyImpl.IMMUTABLE_TYPE, + ValueImpl.ImmutableImpl.class) == null) .count(); if (undecided > 0) { LOGGER.info("Certification point, but {} types immutability-undecided: activating cycle breaking", @@ -728,11 +756,11 @@ private void iterate(List analysisOrder, io.codelaser.maddi.graph.G nextPassKind = "cycle breaking"; { int it = iterations; - feed(f -> f.phase(io.codelaser.maddi.analysis.api.AnalysisValueFeed.Phase + feed(f -> f.phase(AnalysisValueFeed.Phase .CYCLE_BREAKING_ACTIVATED, it)); } // one more FULL pass, now with cycle breaking; incremental: over the scope - dirty = incremental ? new java.util.HashSet<>(scopePass(everAnalyzed, analysisOrder)) : null; + dirty = incremental ? new HashSet<>(scopePass(everAnalyzed, analysisOrder)) : null; if (dependersOf != null) verifying = true; previousPropertiesChanged = propertiesChanged; continue; @@ -800,7 +828,7 @@ private void iterate(List analysisOrder, io.codelaser.maddi.graph.G feed(f -> f.stage("MODREACH round " + round)); } try { - var pass = new io.codelaser.maddi.modification.analyzer.shadow.ShadowModificationPass(); + var pass = new ShadowModificationPass(); var report = pass.go(analysisOrder); // MODREACH_DEBUG (presence-only): dump the reverse-divergence class — fixpoint says // modified, reachability finds no modifying frontier. Zero on the certified corpora; @@ -815,8 +843,8 @@ private void iterate(List analysisOrder, io.codelaser.maddi.graph.G String explain = System.getenv("MODREACH_EXPLAIN"); if (explain != null) { for (Object node : report.reached()) { - if (node instanceof io.codelaser.maddi.cst.api.info.Info info - && java.util.Arrays.stream(explain.split(",")) + if (node instanceof Info info + && Arrays.stream(explain.split(",")) .anyMatch(part -> !part.isBlank() && info.fullyQualifiedName().contains(part))) { System.out.println("MODREACH_EXPLAIN " + report.explain(node)); @@ -828,13 +856,13 @@ private void iterate(List analysisOrder, io.codelaser.maddi.graph.G // implementations, which is exactly the path by which this pass reaches it. The same // holds for that method's PARAMETERS, folded over the implementations' parameter at the // same index. UNMODIFIED_FIELD has no such case: see writeVerdicts' javadoc. - java.util.function.Predicate contracted = + Predicate contracted = singleIterationAnalyzer instanceof SingleIterationAnalyzerImpl s ? info -> switch (info) { - case io.codelaser.maddi.cst.api.info.MethodInfo mi -> mi.isAbstract() + case MethodInfo mi -> mi.isAbstract() && s.contractResolution().resolve(mi, io.codelaser.maddi.cst.impl .analysis.PropertyImpl.NON_MODIFYING_METHOD).decided(); - case io.codelaser.maddi.cst.api.info.ParameterInfo pi -> + case ParameterInfo pi -> pi.methodInfo().isAbstract() && s.contractResolution().resolve(pi, io.codelaser.maddi.cst.impl .analysis.PropertyImpl.UNMODIFIED_PARAMETER).decided(); @@ -852,13 +880,13 @@ private void iterate(List analysisOrder, io.codelaser.maddi.graph.G // allows, so nothing needs clearing: the worklist re-derives from the changed elements and // their dependents, and the full verification pass still certifies. A full clear cost a // whole re-derivation (12-13 full iterations) for a round of 5 or 23 upgrades. - java.util.Set seeds = new java.util.HashSet<>(); + Set seeds = new HashSet<>(); for (Info c : counts.changed()) { - Info owner = c instanceof io.codelaser.maddi.cst.api.info.ParameterInfo pi + Info owner = c instanceof ParameterInfo pi ? pi.methodInfo() : c; Info mc = mapToOrderElement(owner, orderSet); if (mc != null) seeds.add(mc); - java.util.Set deps = dependersOf.get(owner); + Set deps = dependersOf.get(owner); if (deps != null) { for (Info d : deps) { Info md = mapToOrderElement(d, orderSet); @@ -939,10 +967,10 @@ private void iterate(List analysisOrder, io.codelaser.maddi.graph.G try { { var terminal = done - ? io.codelaser.maddi.analysis.api.AnalysisValueFeed.Phase.TERMINAL_CERTIFIED + ? AnalysisValueFeed.Phase.TERMINAL_CERTIFIED : plateau - ? io.codelaser.maddi.analysis.api.AnalysisValueFeed.Phase.TERMINAL_PLATEAU - : io.codelaser.maddi.analysis.api.AnalysisValueFeed.Phase.TERMINAL_MAX_ITERATIONS; + ? AnalysisValueFeed.Phase.TERMINAL_PLATEAU + : AnalysisValueFeed.Phase.TERMINAL_MAX_ITERATIONS; int it = iterations; feed(f -> f.phase(terminal, it)); } @@ -957,7 +985,7 @@ private void iterate(List analysisOrder, io.codelaser.maddi.graph.G } logVerdictFingerprint(analysisOrder); if (configuration.guardContracts() || configuration.warnNearMisses() - || io.codelaser.maddi.modification.common.util.Culprits.ENABLED) { + || Culprits.ENABLED) { // values are final now: verify user-written contracts, and/or warn on near-misses feed(f -> f.stage("contract checks")); new GuardAnalyzerImpl(javaInspector.runtime(), configuration, guardMessages).go(analysisOrder); @@ -976,21 +1004,21 @@ private void iterate(List analysisOrder, io.codelaser.maddi.graph.G // when a summary it ACTUALLY READ changes. Catches value-mediated flows (functional- // interface application) with no syntactic call-graph edge — the measured source of the // verification passes' residue (timefold: 142 modified-set changes per full pass). - for (java.util.Map.Entry> e + for (Map.Entry> e : singleIterationAnalyzer.consumedSummaries().entrySet()) { Info consumer = mapToOrderElement(e.getKey(), orderSet); if (consumer == null) continue; - for (io.codelaser.maddi.cst.api.info.MethodInfo consumed : e.getValue()) { - dependersOf.computeIfAbsent(consumed, _ -> new java.util.HashSet<>()).add(consumer); + for (MethodInfo consumed : e.getValue()) { + dependersOf.computeIfAbsent(consumed, _ -> new HashSet<>()).add(consumer); } } // v2: only SUMMARY changes propagate — dependents cannot observe element-internal changes. // The changed element itself IS re-run: a self-recursive method's summary feeds its own next // analysis, and the call graph does not guarantee a self-edge (v2's first cut excluded self and // froze recursive methods at their early conservative verdicts). - java.util.Set changed = singleIterationAnalyzer.summaryChangedInfos(); - java.util.Set next = new java.util.HashSet<>(); + Set changed = singleIterationAnalyzer.summaryChangedInfos(); + Set next = new HashSet<>(); for (Info c : changed) { // an anonymous-class/lambda method is a graph vertex but NOT an analysis-order element: // it only recomputes when its ENCLOSING method re-runs. Unmapped, such dirty elements @@ -999,7 +1027,7 @@ private void iterate(List analysisOrder, io.codelaser.maddi.graph.G Info mc = mapToOrderElement(c, orderSet); if (mc != null) next.add(mc); boolean confined = cutoff && mc != null && cutoffScope.contains(mc); - java.util.Set deps = dependersOf.get(c); // adjacency stays keyed by the raw vertex + Set deps = dependersOf.get(c); // adjacency stays keyed by the raw vertex if (deps != null) { for (Info d : deps) { Info md = mapToOrderElement(d, orderSet); @@ -1029,7 +1057,7 @@ private void iterate(List analysisOrder, io.codelaser.maddi.graph.G // the full pass found changes the worklist missed: resume narrowing from them LOGGER.info("Verification pass found {} changes; resuming worklist", propertiesChanged); // residue diagnosis: WHO changed on a settled state? (adjacency-gap root-causing) - java.util.Set residue = singleIterationAnalyzer.summaryChangedInfos(); + Set residue = singleIterationAnalyzer.summaryChangedInfos(); LOGGER.info("Verification-pass residue ({} elements): {}", residue.size(), residue.stream() .map(Info::fullyQualifiedName).sorted().limit(12) .reduce((a, b) -> a + ", " + b).orElse("-")); @@ -1041,10 +1069,10 @@ private void iterate(List analysisOrder, io.codelaser.maddi.graph.G // SCOPE: the elements this run analysed, the seed and what the worklist pulled in. Those // the worklist never reached keep their values and are not re-touched. Without this, part // of the cold result was never reached (TestWarmAnalysisAfterPartialReparse). - java.util.List scope = scopePass(everAnalyzed, analysisOrder); + List scope = scopePass(everAnalyzed, analysisOrder); LOGGER.info("Incremental worklist dry after {} iterations; verification pass over the {} " + "element(s) of this run's scope", iterations, scope.size()); - dirty = new java.util.HashSet<>(scope); + dirty = new HashSet<>(scope); verifying = true; nextPassKind = "incremental verification"; LOGGER.info("Run again, properties changed {}", propertiesChanged); @@ -1063,8 +1091,8 @@ private void iterate(List analysisOrder, io.codelaser.maddi.graph.G } // the waves with only the elements of the seed, empty units and waves dropped: a wave stays a barrier - private static java.util.List>> restrictWaves( - java.util.List>> waves, java.util.Set seed) { + private static List>> restrictWaves( + List>> waves, Set seed) { return waves.stream() .map(wave -> wave.stream().map(unit -> unit.stream().filter(seed::contains).toList()) .filter(unit -> !unit.isEmpty()).toList()) @@ -1077,7 +1105,7 @@ private static java.util.List>> restrictWave worklist pulled in, which everAnalyzed collects as the clear-before-recompute fires). A cold run's full passes run over this instead. */ - private static List scopePass(java.util.Set everAnalyzed, List analysisOrder) { + private static List scopePass(Set everAnalyzed, List analysisOrder) { return analysisOrder.stream().filter(everAnalyzed::contains).toList(); } @@ -1085,7 +1113,7 @@ private static List scopePass(java.util.Set everAnalyzed, List * Map an element to its analysis-order element: an anonymous-class or lambda method (and its members) * is not itself an order element — walk up through the enclosing methods until one is. */ - private static Info mapToOrderElement(Info info, java.util.Set orderSet) { + private static Info mapToOrderElement(Info info, Set orderSet) { Info c = info; int guard = 0; while (c != null && !orderSet.contains(c) && guard++ < 10) { @@ -1099,9 +1127,9 @@ private static Info mapToOrderElement(Info info, java.util.Set orderSet) { member, so no value analysis depends on it and nothing downstream can be lost by leaving it out of the dirty set. */ - if (c instanceof io.codelaser.maddi.cst.api.element.ModuleInfo) return null; - io.codelaser.maddi.cst.api.info.TypeInfo t = - c instanceof io.codelaser.maddi.cst.api.info.TypeInfo ti ? ti : c.typeInfo(); + if (c instanceof ModuleInfo) return null; + TypeInfo t = + c instanceof TypeInfo ti ? ti : c.typeInfo(); c = t == null ? null : t.enclosingMethod(); } return c != null && orderSet.contains(c) ? c : null; diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/SingleIterationAnalyzerImpl.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/SingleIterationAnalyzerImpl.java index 60bb64ce6..4bfd6e259 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/SingleIterationAnalyzerImpl.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/SingleIterationAnalyzerImpl.java @@ -21,11 +21,23 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; +import java.util.Random; import java.util.Set; +import java.util.TreeMap; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Consumer; +import java.util.function.ObjIntConsumer; import java.util.stream.Stream; import org.slf4j.Logger; @@ -37,11 +49,15 @@ import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.impl.analysis.AnalysisAccessRecorder; +import io.codelaser.maddi.cst.impl.analysis.ConsumptionEdgeRecorder; import io.codelaser.maddi.cst.impl.analysis.MessageImpl; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.modification.analyzer.*; import io.codelaser.maddi.modification.common.defaults.ShallowTypeAnalyzer; @@ -51,6 +67,7 @@ import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; import io.codelaser.maddi.modification.link.impl.ReceiverLevel; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.Util; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; @@ -77,13 +94,13 @@ public class SingleIterationAnalyzerImpl implements SingleIterationAnalyzer, Mod private final AtomicInteger propertiesChanged; private final List messages; private final boolean faultTolerant; - private final Set failed = java.util.concurrent.ConcurrentHashMap.newKeySet(); + private final Set failed = ConcurrentHashMap.newKeySet(); // VariableData flatten-snapshot (Configuration.flattenVariableData; DESIGN-vardata-flatten.md): // runtime rebuilds a method's VD via prepwork on regeneration; the set tracks methods whose // intermediate-statement VD has been dropped, so a re-link regenerates it first. private final Runtime runtime; private final boolean flattenVariableData; - private final Set flattenedMethods = java.util.concurrent.ConcurrentHashMap.newKeySet(); + private final Set flattenedMethods = ConcurrentHashMap.newKeySet(); // Parallel per-element loop: iterations 2+ on a fixed pool, iteration 1 via call-graph strata waves. // DEFAULT ON since the 3-corpus proof (2026-07-17: certified + verdict-exact at 8 threads): min(8, @@ -120,7 +137,7 @@ private static Long parseShuffleSeed() { private List submissionOrder(List list) { if (PARALLEL_SHUFFLE_SEED == null) return list; List copy = new ArrayList<>(list); - java.util.Collections.shuffle(copy, new java.util.Random(PARALLEL_SHUFFLE_SEED * 31 + shufflePass++)); + Collections.shuffle(copy, new Random(PARALLEL_SHUFFLE_SEED * 31 + shufflePass++)); return copy; } @@ -143,9 +160,9 @@ private static int parallelThreads() { // wave-barrier hook (AnalysisValueFeed.waveCompleted): fired on the coordinator thread after each // strata wave's join, with that wave's element set. Set by IteratingAnalyzerImpl when a feed exists. - private java.util.function.ObjIntConsumer> waveCompletedCallback; + private ObjIntConsumer> waveCompletedCallback; - public void setWaveCompletedCallback(java.util.function.ObjIntConsumer> callback) { + public void setWaveCompletedCallback(ObjIntConsumer> callback) { this.waveCompletedCallback = callback; } @@ -172,13 +189,13 @@ public void setElementCompletedCallback(Runnable callback) { */ private static final boolean LINK_CACHE = !Gate.isSet("NOLINKCACHE"); private static final boolean LINK_CACHE_CHECK = Gate.isSet("LINKCACHECHECK"); - private final java.util.Map linkRecordings = - new java.util.concurrent.ConcurrentHashMap<>(); + private final Map linkRecordings = + new ConcurrentHashMap<>(); private final AtomicInteger linkCacheHits = new AtomicInteger(); - private final java.util.Map linkCacheMisses = new java.util.concurrent.ConcurrentHashMap<>(); + private final Map linkCacheMisses = new ConcurrentHashMap<>(); private final AtomicInteger linkCacheCheckFailures = new AtomicInteger(); // LINKCACHECHECK: hits that are recomputed, to compare with the recording they would have replaced - private final Set linkCheckPending = java.util.concurrent.ConcurrentHashMap.newKeySet(); + private final Set linkCheckPending = ConcurrentHashMap.newKeySet(); void setBudget(AnalysisBudget budget) { this.budget = budget; @@ -244,7 +261,7 @@ public ContractResolution contractResolution() { } @Override - public java.util.Map> consumedSummaries() { + public Map> consumedSummaries() { return linkComputer.consumedSummaries(); } @@ -310,7 +327,7 @@ private void goInternal(List analysisOrder, boolean activateCycleBreaking, // regenerate its full per-statement VD from the body (quiescent: before the parallel loop). if (flattenVariableData && !flattenedMethods.isEmpty()) regenerateFlattened(analysisOrder); // first iteration only; concurrent for the strata-parallel path - Set abstractTypes = java.util.concurrent.ConcurrentHashMap.newKeySet(); + Set abstractTypes = ConcurrentHashMap.newKeySet(); // CBSWEEP (#82): under cycle breaking, the per-element loop runs WITHOUT it, and the defaults are applied // afterwards in a sequential sweep over the fields and types, in analysis order, and only on a full pass @@ -339,12 +356,12 @@ private void goInternal(List analysisOrder, boolean activateCycleBreaking, LOGGER.info("Strata-parallel FIRST iteration: {} threads, {} waves, {} units, {} elements", PARALLEL_THREADS, firstIterationWaves.size(), units, elements); linkComputer.setLockComputeDisabled(true); - try (java.util.concurrent.ExecutorService pool = - java.util.concurrent.Executors.newFixedThreadPool(PARALLEL_THREADS)) { + try (ExecutorService pool = + Executors.newFixedThreadPool(PARALLEL_THREADS)) { int waveIndex = 0; for (List> wave : firstIterationWaves) { waveIndex++; - List> futures = new ArrayList<>(wave.size()); + List> futures = new ArrayList<>(wave.size()); for (List unit : submissionOrder(wave)) { futures.add(pool.submit(() -> { for (Info info : unit) { @@ -370,16 +387,16 @@ private void goInternal(List analysisOrder, boolean activateCycleBreaking, && analysisOrder.size() >= MIN_ELEMENTS_FOR_PARALLEL && !(activateCycleBreaking && SEQUENTIAL_CYCLE_BREAKING)) { LOGGER.info("Parallel iteration: {} threads over {} elements", PARALLEL_THREADS, analysisOrder.size()); - List> futures = new ArrayList<>(analysisOrder.size()); - java.util.Map elementMillis = new java.util.concurrent.ConcurrentHashMap<>(); + List> futures = new ArrayList<>(analysisOrder.size()); + Map elementMillis = new ConcurrentHashMap<>(); // A seeded (incremental) analysis clears the links of its seed (ClearDerived) and then runs this // pass with callees still unlinked: computing a callee's links under its analysis monitor // (getOrCreate) nests monitors in call order, and two workers entering a call cycle from different // ends deadlock. Same lock-free recursion as the first-iteration waves; a no-op when every callee // already has its links (the cold case). linkComputer.setLockComputeDisabled(true); - try (java.util.concurrent.ExecutorService pool = - java.util.concurrent.Executors.newFixedThreadPool(PARALLEL_THREADS)) { + try (ExecutorService pool = + Executors.newFixedThreadPool(PARALLEL_THREADS)) { for (Info info : submissionOrder(analysisOrder)) { futures.add(pool.submit(() -> { long t0 = System.nanoTime(); @@ -395,7 +412,7 @@ private void goInternal(List analysisOrder, boolean activateCycleBreaking, } joinAll(futures); String slowest = elementMillis.entrySet().stream() - .sorted(java.util.Map.Entry.comparingByValue().reversed()) + .sorted(Map.Entry.comparingByValue().reversed()) .limit(10) .map(e -> e.getKey().fullyQualifiedName() + "=" + e.getValue() + "ms") .reduce((a, b) -> a + ", " + b).orElse("-"); @@ -403,7 +420,7 @@ private void goInternal(List analysisOrder, boolean activateCycleBreaking, } else { // the same "slowest elements" line the parallel branch prints: the sequential first iteration is // the one every corpus probe runs, and it had no per-element figure at all - java.util.Map elementMillis = LOGGER.isInfoEnabled() ? new java.util.HashMap<>() : null; + Map elementMillis = LOGGER.isInfoEnabled() ? new HashMap<>() : null; for (Info info : analysisOrder) { long t0 = System.nanoTime(); processElement(info, loopCycleBreaking, firstIteration, abstractTypes); @@ -411,7 +428,7 @@ private void goInternal(List analysisOrder, boolean activateCycleBreaking, } if (elementMillis != null) { String slowest = elementMillis.entrySet().stream() - .sorted(java.util.Map.Entry.comparingByValue().reversed()) + .sorted(Map.Entry.comparingByValue().reversed()) .limit(10) .map(e -> e.getKey().fullyQualifiedName() + "=" + e.getValue() + "ms") .reduce((a, b) -> a + ", " + b).orElse("-"); @@ -423,7 +440,7 @@ private void goInternal(List analysisOrder, boolean activateCycleBreaking, // analysisOrder order, independent of parallel completion order List abstractMethods = analysisOrder.stream() .filter(info -> info instanceof MethodInfo mi && !failed.contains(info) - && io.codelaser.maddi.modification.prepwork.Util.unionOverImplementations(mi)) + && Util.unionOverImplementations(mi)) .map(info -> (MethodInfo) info) .toList(); List typesInOrder = analysisOrder.stream() @@ -504,7 +521,7 @@ private void goInternal(List analysisOrder, boolean activateCycleBreaking, LOGGER.info("Phase timing: main loop {} ms, abstract batch {} ms, 2nd type pass {} ms", endLoop - startLoop, startSecondPass - startAbstract, end - startSecondPass); if (linkCacheEnabled()) { - java.util.Map misses = new java.util.TreeMap<>(); + Map misses = new TreeMap<>(); linkCacheMisses.forEach((k, v) -> misses.put(k, v.get())); LOGGER.info("Link cache: {} hit(s), {} check failure(s), misses by first changed property {}", linkCacheHits.getAndSet(0), linkCacheCheckFailures.getAndSet(0), misses); @@ -567,7 +584,7 @@ private void clearAllVariableData(MethodInfo mi) { } } - private static void walkStatements(List statements, java.util.function.Consumer action) { + private static void walkStatements(List statements, Consumer action) { for (Statement s : statements) { action.accept(s); s.subBlockStream().forEach(b -> walkStatements(b.statements(), action)); @@ -585,11 +602,11 @@ private static void clearVariableData(PropertyValueMap analysis) { analysis.removeIf(p -> p == VariableDataImpl.VARIABLE_DATA); } - private static void joinAll(List> futures) { - for (java.util.concurrent.Future future : futures) { + private static void joinAll(List> futures) { + for (Future future : futures) { try { future.get(); - } catch (java.util.concurrent.ExecutionException e) { + } catch (ExecutionException e) { // only reachable when !faultTolerant (processElement rethrows); preserve that contract if (e.getCause() instanceof RuntimeException re) throw re; if (e.getCause() instanceof Error error) throw error; @@ -675,7 +692,7 @@ private void processElement(Info info, boolean activateCycleBreaking, boolean fi if (faultTolerant && failed.contains(info)) return; // an earlier iteration already crashed on this one int changesBefore = propertiesChanged.get(); // task #35 Phase A: attribute all analysis() touches during this element to it (CONSEDGES gate) - io.codelaser.maddi.cst.impl.analysis.ConsumptionEdgeRecorder.setCurrent(info); + ConsumptionEdgeRecorder.setCurrent(info); try { if (info instanceof MethodInfo methodInfo) { sourceContractMaterializer.materialize(methodInfo); @@ -736,14 +753,14 @@ private void processElement(Info info, boolean activateCycleBreaking, boolean fi if (!faultTolerant) throw e; failed.add(info); // degradation marker (task #36): consumers relying on per-call data must go pessimistic here - if (info instanceof io.codelaser.maddi.cst.api.info.MethodInfo mi) { + if (info instanceof MethodInfo mi) { // atomically: a linker thread may be marking it at the same time - mi.analysis().getOrCreate(io.codelaser.maddi.cst.impl.analysis.PropertyImpl.DEGRADED_ANALYSIS_METHOD, - () -> io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE); + mi.analysis().getOrCreate(PropertyImpl.DEGRADED_ANALYSIS_METHOD, + () -> ValueImpl.BoolImpl.TRUE); } messages.add(crashFinding(info, e)); } finally { - io.codelaser.maddi.cst.impl.analysis.ConsumptionEdgeRecorder.clearCurrent(); + ConsumptionEdgeRecorder.clearCurrent(); // under PARALLEL the delta can over-attribute (another thread's change lands in the window); // a superset of changed elements is safe for the worklist if (propertiesChanged.get() > changesBefore) changedInfos.add(info); @@ -759,7 +776,7 @@ private void unionInWriteTargets() { // processed (the link computer's on-demand recursion writing a callee's METHOD_LINKS) for (Object target : TolerantWrite.changedTargets()) { // ParameterInfo extends Info but is not an analysis-order element: attribute to its method - Info info = target instanceof io.codelaser.maddi.cst.api.info.ParameterInfo pi ? pi.methodInfo() + Info info = target instanceof ParameterInfo pi ? pi.methodInfo() : target instanceof Info i ? i : null; if (info != null) { changedInfos.add(info); diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/SourceContractMaterializer.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/SourceContractMaterializer.java index 6bd272382..b475714df 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/SourceContractMaterializer.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/SourceContractMaterializer.java @@ -32,8 +32,10 @@ import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.runtime.Runtime; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.common.defaults.ContractReader; import io.codelaser.maddi.modification.common.util.TolerantWrite; @@ -111,11 +113,11 @@ public void materialize(MethodInfo methodInfo) { // @Modified(hc=true) (#25): the structural twin is a pure contract on a bodiless declaration -- the // deep arm above reads the @Modified, this writes the "hidden content only" refinement beside it, on // the method and on each parameter. Absent, readers fall back to the deep value. - materializeTrueBool(methodInfo, io.codelaser.maddi.cst.impl.analysis.PropertyImpl.STRUCTURALLY_NON_MODIFYING_METHOD); + materializeTrueBool(methodInfo, PropertyImpl.STRUCTURALLY_NON_MODIFYING_METHOD); // @UnmodifiableView (#52): a pure contract on a bodiless declaration; a method with a body is computed - materializeTrueBool(methodInfo, io.codelaser.maddi.cst.impl.analysis.PropertyImpl.UNMODIFIABLE_VIEW_METHOD); - for (io.codelaser.maddi.cst.api.info.ParameterInfo pi : methodInfo.parameters()) { - materializeTrueBool(pi, io.codelaser.maddi.cst.impl.analysis.PropertyImpl.STRUCTURALLY_UNMODIFIED_PARAMETER); + materializeTrueBool(methodInfo, PropertyImpl.UNMODIFIABLE_VIEW_METHOD); + for (ParameterInfo pi : methodInfo.parameters()) { + materializeTrueBool(pi, PropertyImpl.STRUCTURALLY_UNMODIFIED_PARAMETER); } } // @StaticSideEffects is the global-escape twin of @IgnoreModifications: a pure contract on the safe @@ -127,11 +129,11 @@ public void materialize(MethodInfo methodInfo) { // @Finalizer is a pure contract too: nothing computes it, and without materialization a SOURCE method's // annotation is read by nothing (MethodInfo.isFinalizer() reads analysis()). The Rust printer turns it into // a method taking self by value (CodeLaser/maddi#167). - materializeTrueBool(methodInfo, io.codelaser.maddi.cst.impl.analysis.PropertyImpl.FINALIZER_METHOD); + materializeTrueBool(methodInfo, PropertyImpl.FINALIZER_METHOD); // @IgnoreModifications on a SOURCE method (a log method writing a buffer): the same pure contract as on a // parameter or field below. Its callers do not count a call to it as a modification (the reachability // pass, ShallowMethodLinkComputer); the method's own NON_MODIFYING_METHOD stays computed. - materializeTrueBool(methodInfo, io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IGNORE_MODIFICATION_METHOD); + materializeTrueBool(methodInfo, PropertyImpl.IGNORE_MODIFICATION_METHOD); // @IgnoreModifications on a SOURCE parameter is the same pure-contract gap as the field arm below: // the author disclaims what the argument object does (typically a functional parameter applied to // this — Element.visit(@IgnoreModifications Predicate)); it cannot be computed, and without @@ -140,19 +142,19 @@ public void materialize(MethodInfo methodInfo) { // disclaimer filters consume it. A contract on a declaration binds every override: the annotation // is written once, on the interface (the shallow analyzer gives jar methods the same inheritance), // so an implementation's parameter inherits the disclaimer from any overridden declaration. - for (io.codelaser.maddi.cst.api.info.ParameterInfo pi : methodInfo.parameters()) { - materializeTrueBool(pi, io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IGNORE_MODIFICATIONS_PARAMETER); + for (ParameterInfo pi : methodInfo.parameters()) { + materializeTrueBool(pi, PropertyImpl.IGNORE_MODIFICATIONS_PARAMETER); if (!pi.analysis().haveAnalyzedValueFor( - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IGNORE_MODIFICATIONS_PARAMETER)) { + PropertyImpl.IGNORE_MODIFICATIONS_PARAMETER)) { for (MethodInfo overridden : methodInfo.overrides()) { if (pi.index() >= overridden.parameters().size()) continue; - io.codelaser.maddi.cst.api.info.ParameterInfo opi = overridden.parameters().get(pi.index()); + ParameterInfo opi = overridden.parameters().get(pi.index()); if (opi.annotations().isEmpty()) continue; if (contractReader.contracts(opi).get( - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IGNORE_MODIFICATIONS_PARAMETER) + PropertyImpl.IGNORE_MODIFICATIONS_PARAMETER) instanceof Value.Bool bool && bool.isTrue()) { pi.analysis().set( - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IGNORE_MODIFICATIONS_PARAMETER, bool); + PropertyImpl.IGNORE_MODIFICATIONS_PARAMETER, bool); CommonAnalyzerImpl.DECIDE.debug("SCM: Inherited @IgnoreModifications on {} from {}", pi, opi); propertyChanges.incrementAndGet(); break; diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/StaticSideEffectAnalyzerImpl.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/StaticSideEffectAnalyzerImpl.java index e36424545..c4827e658 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/StaticSideEffectAnalyzerImpl.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/StaticSideEffectAnalyzerImpl.java @@ -17,12 +17,14 @@ package io.codelaser.maddi.modification.analyzer.impl; +import java.util.ArrayList; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Predicate; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.Element; @@ -139,11 +141,11 @@ public void go(TypeInfo typeInfo, boolean activateCycleBreaking) { assignment or modifying call itself, or at a callee without a body (a contract); a call whose callee yields no chain is passed over. Empty when nothing is found. */ - private List culprit(MethodInfo mi, java.util.function.Predicate wanted, + private List culprit(MethodInfo mi, Predicate wanted, Map> group, int depth, Set visited) { if (!visited.add(mi) || depth > CULPRIT_DEPTH) return List.of(); - List found = new java.util.ArrayList<>(); - java.util.function.Predicate visitor = e -> { + List found = new ArrayList<>(); + Predicate visitor = e -> { if (!found.isEmpty()) return false; FieldReference direct = directStaticModification(e); if (direct != null && wanted.test(direct.fieldInfo().owner())) { @@ -218,7 +220,7 @@ private boolean collect(MethodInfo mi, Map> sets, Set< boolean activateCycleBreaking) { Set set = sets.get(mi); boolean[] waits = {false}; - java.util.function.Predicate visitor = e -> { + Predicate visitor = e -> { // assignment to a static field or a field of one: 'Other.STATIC = ...', 'count++', 'Other.STATIC.count // = 5'; not to an @IgnoreModifications one if (e instanceof Assignment a && OwnStaticState.staticRoot(a.variableTarget()) instanceof FieldReference fr) { diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeCulprit.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeCulprit.java index 68aa9367f..8d2fda131 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeCulprit.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeCulprit.java @@ -23,7 +23,9 @@ import java.net.URI; import java.util.ArrayList; import java.util.List; +import java.util.Objects; +import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.element.Source; @@ -338,7 +340,7 @@ private void hiddenContent(TypeInfo typeInfo, List steps) { // ---- helpers ---- private static boolean samePlace(Value.Culprit.Step a, Value.Culprit.Step b) { - return a.line() == b.line() && a.column() == b.column() && java.util.Objects.equals(a.uri(), b.uri()); + return a.line() == b.line() && a.column() == b.column() && Objects.equals(a.uri(), b.uri()); } private static boolean isSelf(FieldInfo field) { @@ -346,12 +348,12 @@ private static boolean isSelf(FieldInfo field) { return bestType != null && bestType.equals(field.owner()); } - private static boolean isFalse(Info info, io.codelaser.maddi.cst.api.analysis.Property property) { + private static boolean isFalse(Info info, Property property) { Value.Bool b = info.analysis().getOrNull(property, ValueImpl.BoolImpl.class); return b != null && b.isFalse(); } - private static List culpritOf(Info info, io.codelaser.maddi.cst.api.analysis.Property property) { + private static List culpritOf(Info info, Property property) { ValueImpl.CulpritImpl culprit = info.analysis().getOrNull(property, ValueImpl.CulpritImpl.class); return culprit == null ? List.of() : culprit.steps(); } @@ -363,7 +365,7 @@ private static Value.Culprit.Step step(GuardAnalyzerImpl.Culprit culprit) { source == null ? 0 : source.beginPos(), culprit.what()); } - private static void set(Info info, io.codelaser.maddi.cst.api.analysis.Property property, + private static void set(Info info, Property property, List steps) { if (steps.isEmpty()) return; ValueImpl.CulpritImpl culprit = new ValueImpl.CulpritImpl(steps); diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeEventualAnalyzerImpl.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeEventualAnalyzerImpl.java index 349c7830e..ac0dd25b9 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeEventualAnalyzerImpl.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeEventualAnalyzerImpl.java @@ -27,6 +27,7 @@ import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.UNMODIFIED_PARAMETER; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.EventualImpl.NOT_EVENTUAL; +import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -40,7 +41,9 @@ import java.util.stream.Collectors; import io.codelaser.maddi.cst.api.analysis.Message; +import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.expression.Assignment; import io.codelaser.maddi.cst.api.expression.Cast; import io.codelaser.maddi.cst.api.expression.ConstructorCall; @@ -742,7 +745,7 @@ private void expression(Expression expr, boolean spine) { } /** No side contributions from a conditional region; a {@code @Mark} seen there still taints. */ - private void conditional(io.codelaser.maddi.cst.api.element.Element element) { + private void conditional(Element element) { if (element == null) return; element.visit(e -> { if (e instanceof TypeInfo) return false; // local/anonymous types: their own walks @@ -1982,7 +1985,7 @@ private static boolean isAncestorType(TypeInfo ancestor, TypeInfo type) { * implementations' excuses, and the code paths they excuse cannot execute on an argument of this cone. */ private boolean residueVacuousOnCone(TypeInfo rootType, Set residue) { if (residue.isEmpty()) return true; - java.util.ArrayDeque todo = new java.util.ArrayDeque<>(); + ArrayDeque todo = new ArrayDeque<>(); Set seen = new HashSet<>(); todo.add(rootType); while (!todo.isEmpty()) { @@ -2341,7 +2344,7 @@ private static boolean implementationHonestlyModifies(MethodInfo methodInfo) { } private static boolean anyImplementationModifies(MethodInfo methodInfo, - io.codelaser.maddi.cst.api.analysis.Property property) { + Property property) { for (MethodInfo implementation : methodInfo.analysis() .getOrDefault(property, ValueImpl.SetOfMethodInfoImpl.EMPTY).methodInfoSet()) { Value.Bool nonModifying = implementation.analysis() diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeImmutableAnalyzerImpl.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeImmutableAnalyzerImpl.java index 3cd559659..464df332e 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeImmutableAnalyzerImpl.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeImmutableAnalyzerImpl.java @@ -34,6 +34,7 @@ import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.type.ParameterizedType; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.CycleBreakingStrategy; import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; @@ -477,7 +478,7 @@ private void decideUnmodifiable(TypeInfo typeInfo, boolean activateCycleBreaking } Value.Bool value = ValueImpl.BoolImpl.from(unmodifiable); if (TolerantWrite.setAllowControlledOverwrite(typeInfo.analysis(), - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.UNMODIFIABLE_TYPE, value, typeInfo)) { + PropertyImpl.UNMODIFIABLE_TYPE, value, typeInfo)) { DECIDE.debug("TI: Decide unmodifiable of type {} = {}", typeInfo, value); propertyChanges.incrementAndGet(); } @@ -496,7 +497,7 @@ private Boolean computeUnmodifiableType(TypeInfo typeInfo) { Immutable superImmutable = superType.analysis().getOrNull(IMMUTABLE_TYPE, ValueImpl.ImmutableImpl.class); if (superImmutable != null && superImmutable.isAtLeastImmutableHC()) continue; Value.Bool superUnmodifiable = superType.analysis().getOrNull( - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.UNMODIFIABLE_TYPE, ValueImpl.BoolImpl.class); + PropertyImpl.UNMODIFIABLE_TYPE, ValueImpl.BoolImpl.class); if (superUnmodifiable == null) { boolean source = superType.compilationUnit() != null && superType.compilationUnit().sourceSet() != null && !superType.compilationUnit().sourceSet().externalLibrary(); @@ -512,7 +513,7 @@ private Boolean computeUnmodifiableType(TypeInfo typeInfo) { Immutable fieldTypeImmutable = analysisHelper.typeImmutableNullIfUndecided(fieldInfo.type()); if (fieldTypeImmutable != null && fieldTypeImmutable.isAtLeastImmutableHC()) continue; Bool unmodified = fieldInfo.analysis().getOrNull( - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.STRUCTURALLY_UNMODIFIED_FIELD, ValueImpl.BoolImpl.class); + PropertyImpl.STRUCTURALLY_UNMODIFIED_FIELD, ValueImpl.BoolImpl.class); if (unmodified == null) unmodified = fieldInfo.analysis().getOrNull(UNMODIFIED_FIELD, ValueImpl.BoolImpl.class); if (unmodified == null) { result = null; @@ -523,7 +524,7 @@ private Boolean computeUnmodifiableType(TypeInfo typeInfo) { for (MethodInfo methodInfo : typeInfo.methods()) { if (!methodInfo.isAbstract()) continue; // a concrete method counts through the fields it modifies Bool nonModifying = methodInfo.analysis().getOrNull( - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.STRUCTURALLY_NON_MODIFYING_METHOD, ValueImpl.BoolImpl.class); + PropertyImpl.STRUCTURALLY_NON_MODIFYING_METHOD, ValueImpl.BoolImpl.class); if (nonModifying == null) nonModifying = methodInfo.analysis().getOrNull(NON_MODIFYING_METHOD, ValueImpl.BoolImpl.class); if (nonModifying == null) { result = null; diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeIndependentAnalyzerImpl.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeIndependentAnalyzerImpl.java index cc0c0b51b..32e7c23df 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeIndependentAnalyzerImpl.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeIndependentAnalyzerImpl.java @@ -35,12 +35,20 @@ import io.codelaser.maddi.cst.api.analysis.Message; import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.expression.Assignment; +import io.codelaser.maddi.cst.api.expression.Cast; +import io.codelaser.maddi.cst.api.expression.EnclosedExpression; +import io.codelaser.maddi.cst.api.expression.Expression; +import io.codelaser.maddi.cst.api.expression.InlineConditional; +import io.codelaser.maddi.cst.api.expression.MethodCall; +import io.codelaser.maddi.cst.api.expression.NullConstant; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.api.type.ParameterizedType; +import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; import io.codelaser.maddi.modification.analyzer.TypeImmutableAnalyzer; @@ -48,7 +56,9 @@ import io.codelaser.maddi.modification.common.AnalysisHelper; import io.codelaser.maddi.modification.common.defaults.ContractReader; import io.codelaser.maddi.modification.common.util.TolerantWrite; +import io.codelaser.maddi.modification.link.impl.Gate; import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.Util; import io.codelaser.maddi.modification.prepwork.variable.Link; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; @@ -67,7 +77,7 @@ public class TypeIndependentAnalyzerImpl extends CommonAnalyzerImpl implements T // log-only diagnostic gate, shared name with TypeEventualAnalyzerImpl / TypeImmutableAnalyzerImpl private static final String EC_TYPE_DEBUG = System.getenv("EC_TYPE_DEBUG"); // #82: NOSUPERWAIT restores the concrete-methods shortcut for an undecided abstract SOURCE supertype - private static final boolean NO_SUPER_WAIT = io.codelaser.maddi.modification.link.impl.Gate.isSet("NOSUPERWAIT"); + private static final boolean NO_SUPER_WAIT = Gate.isSet("NOSUPERWAIT"); // INDEPENDENCEWALK=0 restores the min over supertype verdicts (A/B switch, as INTERFACEWALK on the immutability side) private static final boolean INDEPENDENCE_WALK = !"0".equals(System.getenv("INDEPENDENCEWALK")); @@ -515,7 +525,7 @@ private Value.Immutable immutableOf(TypeInfo typeInfo) { */ private boolean ignoreModificationsAccessor(MethodInfo methodInfo) { if (isIgnoreModAccessor(methodInfo)) return true; - if (!io.codelaser.maddi.modification.prepwork.Util.unionOverImplementations(methodInfo)) return false; + if (!Util.unionOverImplementations(methodInfo)) return false; for (MethodInfo im : methodInfo.analysis() .getOrDefault(IMPLEMENTATIONS, ValueImpl.SetOfMethodInfoImpl.EMPTY).methodInfoSet()) { if (isIgnoreModAccessor(im)) return true; @@ -565,7 +575,7 @@ private boolean sharedContentCommits(TypeInfo member, MethodInfo abstractMethod) /** @param parameterIndex -1 for the return value */ private boolean sharedContentCommits(TypeInfo member, MethodInfo abstractMethod, int parameterIndex, String what) { - if (!io.codelaser.maddi.modification.prepwork.Util.unionOverImplementations(abstractMethod)) return false; + if (!Util.unionOverImplementations(abstractMethod)) return false; Value.SetOfMethodInfo implementations = abstractMethod.analysis() .getOrDefault(IMPLEMENTATIONS, ValueImpl.SetOfMethodInfoImpl.EMPTY); if (implementations.isEmpty()) return false; @@ -625,14 +635,14 @@ private boolean contractedIndependentHcParam(ParameterInfo parameterInfo) { private boolean fieldWrapperProvablyImmutable(FieldInfo fieldInfo) { return wrapperImmutableCache.computeIfAbsent(fieldInfo, f -> { - java.util.List writes = new java.util.ArrayList<>(); - io.codelaser.maddi.cst.api.expression.Expression init = f.initializer(); + List writes = new ArrayList<>(); + Expression init = f.initializer(); if (init != null && !init.isEmpty()) writes.add(init); for (MethodInfo ctor : f.owner().constructors()) { if (ctor.methodBody().isEmpty()) continue; ctor.methodBody().visit(e -> { - if (e instanceof io.codelaser.maddi.cst.api.expression.Assignment a - && a.variableTarget() instanceof io.codelaser.maddi.cst.api.variable.FieldReference fr + if (e instanceof Assignment a + && a.variableTarget() instanceof FieldReference fr && fr.scopeIsThis() && f.equals(fr.fieldInfo())) { writes.add(a.value()); } @@ -647,22 +657,22 @@ private boolean fieldWrapperProvablyImmutable(FieldInfo fieldInfo) { // Kotlin's copies are copies, not immutable ones: toList/toSet/toMap return a fresh ArrayList, LinkedHashSet, // LinkedHashMap; listOf(a, b) is Arrays.asList, setOf/mapOf a LinkedHashSet/Map. A getter hands out a mutable // wrapper. Only the empty singletons cannot be mutated. - private static final java.util.Set KOTLIN_COPIES = java.util.Set.of("emptyList", "emptySet", "emptyMap"); + private static final Set KOTLIN_COPIES = Set.of("emptyList", "emptySet", "emptyMap"); - private static boolean immutableCopyExpression(io.codelaser.maddi.cst.api.expression.Expression expr) { - if (expr instanceof io.codelaser.maddi.cst.api.expression.NullConstant) { + private static boolean immutableCopyExpression(Expression expr) { + if (expr instanceof NullConstant) { return true; // a null wrapper cannot be mutated; the null-tolerant copyOf ternary shape } - if (expr instanceof io.codelaser.maddi.cst.api.expression.Cast c) { + if (expr instanceof Cast c) { return immutableCopyExpression(c.expression()); } - if (expr instanceof io.codelaser.maddi.cst.api.expression.EnclosedExpression ee) { + if (expr instanceof EnclosedExpression ee) { return immutableCopyExpression(ee.inner()); } - if (expr instanceof io.codelaser.maddi.cst.api.expression.InlineConditional ic) { + if (expr instanceof InlineConditional ic) { return immutableCopyExpression(ic.ifTrue()) && immutableCopyExpression(ic.ifFalse()); } - if (expr instanceof io.codelaser.maddi.cst.api.expression.MethodCall mc) { + if (expr instanceof MethodCall mc) { MethodInfo mi = mc.methodInfo(); String name = mi.name(); if (("copyOf".equals(name) || "of".equals(name)) && mi.isStatic()) { diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeModIndyAnalyzerImpl.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeModIndyAnalyzerImpl.java index f178dd02e..0f58f5da4 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeModIndyAnalyzerImpl.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/impl/TypeModIndyAnalyzerImpl.java @@ -23,6 +23,8 @@ import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.*; import static io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS; +import java.util.ArrayList; +import java.util.Comparator; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -31,10 +33,19 @@ import io.codelaser.maddi.cst.api.analysis.Message; import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.element.Element; +import io.codelaser.maddi.cst.api.expression.Cast; +import io.codelaser.maddi.cst.api.expression.EnclosedExpression; +import io.codelaser.maddi.cst.api.expression.Expression; +import io.codelaser.maddi.cst.api.expression.InlineConditional; +import io.codelaser.maddi.cst.api.expression.Lambda; +import io.codelaser.maddi.cst.api.expression.MethodCall; +import io.codelaser.maddi.cst.api.expression.VariableExpression; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.ReturnStatement; import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.FieldReference; @@ -159,10 +170,10 @@ private void doUnmodifiableView(boolean cycleBreakingActive, MethodInfo methodIn || methodInfo.returnType().arrays() > 0 || methodInfo.returnType().typeParameter() != null) { return; } - List returned = new java.util.ArrayList<>(); - methodInfo.methodBody().visit((io.codelaser.maddi.cst.api.element.Element e) -> { - if (e instanceof io.codelaser.maddi.cst.api.expression.Lambda) return false; // its returns are its own - if (e instanceof io.codelaser.maddi.cst.api.statement.ReturnStatement rs && rs.expression() != null + List returned = new ArrayList<>(); + methodInfo.methodBody().visit((Element e) -> { + if (e instanceof Lambda) return false; // its returns are its own + if (e instanceof ReturnStatement rs && rs.expression() != null && !rs.expression().isEmpty()) { returned.add(rs.expression()); } @@ -187,23 +198,23 @@ private void doUnmodifiableView(boolean cycleBreakingActive, MethodInfo methodIn } /** Whether every value the expression can take is the null constant (true for an empty stream of returns). */ - private static boolean onlyNull(io.codelaser.maddi.cst.api.expression.Expression value) { + private static boolean onlyNull(Expression value) { return switch (value) { - case io.codelaser.maddi.cst.api.expression.EnclosedExpression ee -> onlyNull(ee.inner()); - case io.codelaser.maddi.cst.api.expression.Cast cast -> onlyNull(cast.expression()); - case io.codelaser.maddi.cst.api.expression.InlineConditional ic -> onlyNull(ic.ifTrue()) && onlyNull(ic.ifFalse()); + case EnclosedExpression ee -> onlyNull(ee.inner()); + case Cast cast -> onlyNull(cast.expression()); + case InlineConditional ic -> onlyNull(ic.ifTrue()) && onlyNull(ic.ifFalse()); default -> value.isNullConstant(); }; } /** TRUE, FALSE, or null when a source callee has not been decided yet. */ - private Boolean unmodifiableValue(io.codelaser.maddi.cst.api.expression.Expression value, int depth) { + private Boolean unmodifiableValue(Expression value, int depth) { if (value.isNullConstant()) return true; if (depth > 3) return false; switch (value) { - case io.codelaser.maddi.cst.api.expression.EnclosedExpression ee -> { return unmodifiableValue(ee.inner(), depth + 1); } - case io.codelaser.maddi.cst.api.expression.Cast cast -> { return unmodifiableValue(cast.expression(), depth + 1); } - case io.codelaser.maddi.cst.api.expression.InlineConditional ic -> { + case EnclosedExpression ee -> { return unmodifiableValue(ee.inner(), depth + 1); } + case Cast cast -> { return unmodifiableValue(cast.expression(), depth + 1); } + case InlineConditional ic -> { Boolean t = unmodifiableValue(ic.ifTrue(), depth + 1); if (t != null && !t) return false; Boolean f = unmodifiableValue(ic.ifFalse(), depth + 1); @@ -219,21 +230,21 @@ private Boolean unmodifiableValue(io.codelaser.maddi.cst.api.expression.Expressi if (type.arrays() == 0 && type.typeInfo() != null) { Value.Bool unmodifiableType = type.typeInfo().analysis().getOrNull(UNMODIFIABLE_TYPE, ValueImpl.BoolImpl.class); if (unmodifiableType != null && unmodifiableType.isTrue()) return true; - if (unmodifiableType == null && !(value instanceof io.codelaser.maddi.cst.api.expression.MethodCall) + if (unmodifiableType == null && !(value instanceof MethodCall) && type.typeInfo().compilationUnit() != null && type.typeInfo().compilationUnit().sourceSet() != null && !type.typeInfo().compilationUnit().sourceSet().externalLibrary()) { return null; // a source type: its verdict arrives with the type analyzers } } } - if (value instanceof io.codelaser.maddi.cst.api.expression.MethodCall mc && mc.methodInfo() != null) { + if (value instanceof MethodCall mc && mc.methodInfo() != null) { MethodInfo callee = mc.methodInfo(); Boolean ofOverrides = unmodifiableOverrides(callee); if (Boolean.FALSE.equals(ofOverrides)) return false; Boolean ofCallee = unmodifiableCallee(callee); return ofCallee == null || !ofCallee ? ofCallee : ofOverrides; } - if (value instanceof io.codelaser.maddi.cst.api.expression.VariableExpression ve + if (value instanceof VariableExpression ve && ve.variable() instanceof FieldReference fr) { Value.Immutable ofField = fr.fieldInfo().analysis().getOrNull(IMMUTABLE_FIELD, ValueImpl.ImmutableImpl.class); return ofField != null && ofField.isAtLeastImmutableHC(); @@ -581,7 +592,7 @@ private static Independent withDependentExceptions(MethodInfo methodInfo, Links if (exceptions.isEmpty()) return worst; // state them on the DECLARED return type, as @Independent(except = "remove") does (the pass set also holds // the inner class's own overriding methods, which a caller of the declared type never names) - io.codelaser.maddi.cst.api.info.TypeInfo returnType = methodInfo.returnType().bestTypeInfo(); + TypeInfo returnType = methodInfo.returnType().bestTypeInfo(); if (returnType != null) { Set onReturnType = new HashSet<>(); for (MethodInfo m : exceptions) { @@ -592,7 +603,7 @@ private static Independent withDependentExceptions(MethodInfo methodInfo, Links if (!onReturnType.isEmpty()) exceptions = onReturnType; } List sorted = exceptions.stream() - .sorted(java.util.Comparator.comparing(MethodInfo::fullyQualifiedName)).toList(); + .sorted(Comparator.comparing(MethodInfo::fullyQualifiedName)).toList(); return new ValueImpl.IndependentImpl(worst.isIndependent() ? 2 : 1, Map.of(), sorted); } diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/CallResults.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/CallResults.java index 614c1d853..e0f2a0576 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/CallResults.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/CallResults.java @@ -21,6 +21,7 @@ import java.util.ArrayDeque; import java.util.ArrayList; +import java.util.Collections; import java.util.Deque; import java.util.HashMap; import java.util.HashSet; @@ -29,6 +30,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Stream; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.Element; @@ -49,6 +51,7 @@ import io.codelaser.maddi.cst.api.statement.ExpressionAsStatement; import io.codelaser.maddi.cst.api.statement.ForEachStatement; import io.codelaser.maddi.cst.api.statement.ForStatement; +import io.codelaser.maddi.cst.api.statement.IfElseStatement; import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; import io.codelaser.maddi.cst.api.statement.ReturnStatement; import io.codelaser.maddi.cst.api.statement.Statement; @@ -181,7 +184,7 @@ private record ReadScope(MethodInfo mi, Scope scope) { 'subRange.lowerBound' in the other, made Range.lowerBound and ImmutableRangeSet's 'Cut?' nullable, 2026-10-17). Only an if without else whose block ends in a throw or return. */ - final Set deadNullAssignments = java.util.Collections.newSetFromMap(new IdentityHashMap<>()); + final Set deadNullAssignments = Collections.newSetFromMap(new IdentityHashMap<>()); void deadNullAssignments(Block block) { List statements = block.statements(); @@ -189,7 +192,7 @@ void deadNullAssignments(Block block) { Statement statement = statements.get(i); for (Block sub : statement.subBlocks()) deadNullAssignments(sub); if (i + 1 >= statements.size() - || !(statements.get(i + 1) instanceof io.codelaser.maddi.cst.api.statement.IfElseStatement ifs) + || !(statements.get(i + 1) instanceof IfElseStatement ifs) || ifs.elseBlock() != null && !ifs.elseBlock().isEmpty() || !exits(ifs.block())) { continue; } @@ -824,7 +827,7 @@ && isTypeVariable(type.copyWithOneFewerArrays())) { if (lib != null) { // not a member Kotlin itself types nullable ('Map.get(k): V?'): the local must then be declared so if (!(target instanceof Local && seedStatement != null && deadNullAssignments.contains(seedStatement) - && java.util.stream.Stream.concat(java.util.stream.Stream.of(callee), overrides(callee).stream()) + && Stream.concat(Stream.of(callee), overrides(callee).stream()) .noneMatch(m -> Contracts.KOTLIN_COLLECTIONS.contains(m.typeInfo().fullyQualifiedName())))) { seeds.seedIndirect(target, "assigned " + lib); } else if (!GUARDED_LOCALS_OFF.get()) { diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Contracts.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Contracts.java index e2d6b3ed6..fa5356dd3 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Contracts.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Contracts.java @@ -19,8 +19,10 @@ import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; +import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.IdentityHashMap; @@ -28,8 +30,12 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.expression.AnnotationExpression; import io.codelaser.maddi.cst.api.expression.Assignment; import io.codelaser.maddi.cst.api.expression.BinaryOperator; import io.codelaser.maddi.cst.api.expression.Cast; @@ -86,7 +92,7 @@ final class Contracts { this.presentLookups = presentLookups; } - final Set lookups = java.util.Collections.newSetFromMap(new IdentityHashMap<>()); + final Set lookups = Collections.newSetFromMap(new IdentityHashMap<>()); final Set degraded = new LinkedHashSet<>(); // source declarations annotated non-null (Policy.contracts): null stops there final Set nonNullContracts = new HashSet<>(); @@ -136,7 +142,7 @@ && stateOf(overridden, PropertyImpl.NULLABILITY_METHOD) != NullableState.NULLABL above) are non-null too, a null value asserted: an override may not widen its overridden member's return. */ void nonNullOverrides(List methods) { - java.util.ArrayDeque work = new java.util.ArrayDeque<>(); + ArrayDeque work = new ArrayDeque<>(); for (MethodInfo mi : methods) if (nonNullContracts.contains(mi)) work.add(mi); while (!work.isEmpty()) { MethodInfo m = work.poll(); @@ -303,7 +309,7 @@ NullableState explicitState(Info info) { // the array type's own annotations ('X @Nullable []', guava's RegularImmutableMap.table) are about the array; // the declaration's list holds a parameter's type-use annotation, which the front end also moved to the // element, and a field's, which it did not: there the annotation type's @Target decides - List own = new ArrayList<>(type.annotations()); + List own = new ArrayList<>(type.annotations()); for (var ae : info.annotations()) { if (ae.typeInfo() != null && !onElement.contains(ae.typeInfo().fullyQualifiedName()) && !typeUseOnly(ae.typeInfo())) { @@ -339,7 +345,7 @@ private static boolean typeUseOnly(TypeInfo annotationType) { if (target.typeInfo() == null || !"java.lang.annotation.Target".equals(target.typeInfo().fullyQualifiedName())) continue; String targets = target.keyValuePairs().stream().map(kv -> String.valueOf(kv.value())) - .collect(java.util.stream.Collectors.joining(",")); + .collect(Collectors.joining(",")); return targets.contains("TYPE_USE") && !targets.contains("FIELD") && !targets.contains("PARAMETER") && !targets.contains("METHOD"); } @@ -505,7 +511,7 @@ String libraryNullableReturn(MethodInfo mi) { AuthenticationProcessingFilter2.kt:36, 2026-10-20). Gate NONEARESTLIBRARYRETURN: any one that says nullable. */ private List nearestLibraryDeclarations(MethodInfo mi) { - List declared = java.util.stream.Stream.concat(java.util.stream.Stream.of(mi), overrides(mi).stream()) + List declared = Stream.concat(Stream.of(mi), overrides(mi).stream()) .filter(m -> !index.analysed.contains(m)) .filter(m -> libraryReturnState(m) != NullableState.UNSPECIFIED) .toList(); @@ -558,8 +564,8 @@ The content an overridden library method declares nullable, one level down (the override declares the same shape (the same class or array of it), so that the positions correspond. */ void libraryNullableContent(Object node, ParameterizedType declared, - java.util.function.Function nullabilityOf, - java.util.function.Function typeOf) { + Function nullabilityOf, + Function typeOf) { MethodInfo mi = node instanceof ParameterInfo pi ? pi.methodInfo() : (MethodInfo) node; if (declared == null || declared.isVoid() || declared.isPrimitiveExcludingVoid() && declared.arrays() == 0) return; for (MethodInfo m : overrides(mi)) { @@ -579,7 +585,7 @@ void libraryNullableContent(Object node, ParameterizedType declared, /** A library method, {@code mi} or one it overrides, whose parameter {@code index} accepts null. */ String libraryNullableParameter(MethodInfo mi, int index) { - return java.util.stream.Stream.concat(java.util.stream.Stream.of(mi), overrides(mi).stream()) + return Stream.concat(Stream.of(mi), overrides(mi).stream()) .filter(m -> !this.index.analysed.contains(m) && index < m.parameters().size()) .filter(m -> libraryParameterState(m.parameters().get(index)) == NullableState.NULLABLE) .map(MethodInfo::fullyQualifiedName).findFirst().orElse(null); @@ -854,7 +860,7 @@ static Set lazyCacheCalls(Policy policy, List analysisOrder) { && !mc.methodInfo().isStatic() && !mc.methodInfo().returnType().isPrimitiveExcludingVoid() && (mc.object() == null || mc.object().isEmpty() || NonNullFacts.unwrap(mc.object()) instanceof VariableExpression ve - && ve.variable() instanceof io.codelaser.maddi.cst.api.variable.This)) { + && ve.variable() instanceof This)) { calls.add(mc.methodInfo()); } return true; diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Index.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Index.java index 9b6437eb0..a64bd3e0d 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Index.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Index.java @@ -20,6 +20,7 @@ import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.IdentityHashMap; @@ -29,6 +30,7 @@ import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.expression.Assignment; +import io.codelaser.maddi.cst.api.expression.BinaryOperator; import io.codelaser.maddi.cst.api.expression.ClassExpression; import io.codelaser.maddi.cst.api.expression.ConstantExpression; import io.codelaser.maddi.cst.api.expression.ConstructorCall; @@ -49,6 +51,7 @@ import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.FieldReference; +import io.codelaser.maddi.cst.api.variable.This; /** * The read-only indexes of one round of the nullability pass, built before the graph (phase 1 of @@ -105,7 +108,7 @@ CallIndex callIndex() { if (e instanceof MethodCall mc && mc.methodInfo() != null && !mc.methodInfo().isStatic()) { Expression object = mc.object(); if (object instanceof VariableExpression ve - && ve.variable() instanceof io.codelaser.maddi.cst.api.variable.This t && t.writeSuper()) { + && ve.variable() instanceof This t && t.writeSuper()) { superCalled.add(mc.methodInfo()); } ParameterizedType type = object == null ? null : object.parameterizedType(); @@ -244,7 +247,7 @@ void indexKeyedMaps(List methods, List fields) { candidates.put(fi, true); } if (candidates.isEmpty()) return; - java.util.Set accounted = java.util.Collections.newSetFromMap(new IdentityHashMap<>()); + Set accounted = Collections.newSetFromMap(new IdentityHashMap<>()); Map putters = new HashMap<>(); Map getters = new HashMap<>(); for (MethodInfo mi : methods) { @@ -272,7 +275,7 @@ void indexKeyedMaps(List methods, List fields) { if (!emptyNewMap(a.value())) candidates.put(fr.fieldInfo(), false); } // a string concatenation reads the map's toString(); also when the parser gives a plain '+' - case io.codelaser.maddi.cst.api.expression.BinaryOperator bo when bo instanceof StringConcat + case BinaryOperator bo when bo instanceof StringConcat || bo.parameterizedType() != null && bo.parameterizedType().arrays() == 0 && bo.parameterizedType().typeInfo() != null && "java.lang.String".equals(bo.parameterizedType().typeInfo().fullyQualifiedName()) -> { diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/MethodWalker.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/MethodWalker.java index ea8179bbe..e69ec7261 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/MethodWalker.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/MethodWalker.java @@ -24,11 +24,15 @@ import java.util.IdentityHashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; +import io.codelaser.maddi.cst.api.analysis.PropertyValueMap; +import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.expression.And; import io.codelaser.maddi.cst.api.expression.ArrayInitializer; +import io.codelaser.maddi.cst.api.expression.ArrayLength; import io.codelaser.maddi.cst.api.expression.Assignment; import io.codelaser.maddi.cst.api.expression.BinaryOperator; import io.codelaser.maddi.cst.api.expression.ConstantExpression; @@ -53,6 +57,7 @@ import io.codelaser.maddi.cst.api.statement.ForEachStatement; import io.codelaser.maddi.cst.api.statement.ForStatement; import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; +import io.codelaser.maddi.cst.api.statement.LoopStatement; import io.codelaser.maddi.cst.api.statement.ReturnStatement; import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.api.statement.TryStatement; @@ -290,7 +295,7 @@ void buildForMethod(MethodInfo mi) { // and its statement carries no variable data, so nothing tied the component to the accessor's return. // Fernflower SwitchPatternHelper: 'initializer.instance' read as non-null while 'Initializer.instance' // was nullable (SwitchPatternHelper.kt:109). The getter/setter association says what it returns. - io.codelaser.maddi.cst.api.analysis.Value.FieldValue getter = mi.getSetField(); + Value.FieldValue getter = mi.getSetField(); if (getter != null && getter.field() != null && !getter.setter() && !getter.hasIndex()) { graph.addEdge(getter.field(), mi); } @@ -493,7 +498,7 @@ private void linkEdge(Object from, Object to, Variable sourceVar, Variable recip } Expression value = assignedValue(statement, recipientVar); Guard guard; - if (value == null && statement instanceof io.codelaser.maddi.cst.api.statement.ForStatement fs) { + if (value == null && statement instanceof ForStatement fs) { // 'for (ClassNode c = child; c != null; c = c.parent)': the loop assigns its variable in its init clause // and in its updaters, statements of their own that the walk does not visit. fernflower // NestedClassProcessor.insertLocalVars printed 'classNode = classNode.parent!!' once the pass read direct @@ -561,7 +566,7 @@ private Guard argumentGuard(Statement statement, Variable source, Variable recip parent's null on the loop variable itself (23f8bf65). */ private static boolean updaterLink(Statement statement, Link link) { - if (!(statement instanceof io.codelaser.maddi.cst.api.statement.ForStatement fs)) return false; + if (!(statement instanceof ForStatement fs)) return false; for (Expression updater : fs.updaters()) { if (NonNullFacts.unwrap(updater) instanceof Assignment a && a.assignmentOperator() == null && (a.variableTarget().equals(link.to()) || a.variableTarget().equals(link.from()))) { @@ -572,13 +577,13 @@ private static boolean updaterLink(Statement statement, Link link) { } // the values a for loop's init clause and updaters assign to 'recipient' - private static List forAssignedValues(io.codelaser.maddi.cst.api.statement.ForStatement fs, + private static List forAssignedValues(ForStatement fs, Variable recipient) { List values = new ArrayList<>(); for (Element init : fs.initializers()) { if (init instanceof LocalVariableCreation lvc) { lvc.localVariableStream().filter(lv -> lv.equals(recipient)) - .map(LocalVariable::assignmentExpression).filter(java.util.Objects::nonNull).forEach(values::add); + .map(LocalVariable::assignmentExpression).filter(Objects::nonNull).forEach(values::add); } else if (init instanceof Assignment a && recipient.equals(a.variableTarget()) && a.assignmentOperator() == null) { values.add(a.value()); } @@ -623,13 +628,13 @@ private Guard guard(Expression value, Variable source, Set known) { if (sameVariable(ve.variable(), source)) { return known.contains(source) ? Guard.GUARDED : Guard.UNGUARDED; } - return ve.variable() instanceof io.codelaser.maddi.cst.api.variable.FieldReference fr + return ve.variable() instanceof FieldReference fr && !fr.scopeIsRecursivelyThis() ? Guard.OPAQUE : Guard.ABSENT; } case InlineConditional ic -> { - Set whenTrue = new java.util.HashSet<>(known); + Set whenTrue = new HashSet<>(known); whenTrue.addAll(facts.whenTrue(ic.condition())); - Set whenFalse = new java.util.HashSet<>(known); + Set whenFalse = new HashSet<>(known); whenFalse.addAll(facts.whenFalse(ic.condition())); return combine(guard(ic.ifTrue(), source, whenTrue), guard(ic.ifFalse(), source, whenFalse)); } @@ -678,7 +683,7 @@ private Scope handleBlock(MethodInfo mi, Block block, Scope parent) { assertCandidates(mi, lvc, statements, index); } // a loop that assigns a parameter: every read inside it may see the assigned value (a later iteration) - if (statement instanceof io.codelaser.maddi.cst.api.statement.LoopStatement) { + if (statement instanceof LoopStatement) { nodes.shadowed.addAll(Nodes.parametersAssignedIn(statement, mi)); } // the statement's own expression is evaluated before its sub-blocks: what they assign does not shadow it @@ -910,7 +915,7 @@ private static boolean dereferences(Expression e, LocalVariable lv) { && fr.scope() != null && isVariable(fr.scope(), lv) -> found[0] = true; case VariableExpression ve when ve.variable() instanceof DependentVariable dv && isVariable(dv.arrayExpression(), lv) -> found[0] = true; - case io.codelaser.maddi.cst.api.expression.ArrayLength al when isVariable(al.scope(), lv) -> + case ArrayLength al when isVariable(al.scope(), lv) -> found[0] = true; default -> { } @@ -1043,7 +1048,7 @@ private void anonymousThisTarget(MethodInfo mi, Scope scope, Statement statement private static final Switches.Gate ANONYMOUS_SUPER_OFF = Switches.gate("NOANONYMOUSSUPER"); private void callSite(MethodInfo mi, Scope scope, Statement statement, Expression call, MethodInfo callee, - io.codelaser.maddi.cst.api.analysis.PropertyValueMap analysis, List arguments) { + PropertyValueMap analysis, List arguments) { List parameters = callee.parameters(); if (parameters.isEmpty()) return; LinkComputer.ListOfLinks list = analysis.getOrNull(LinkComputerImpl.LINKED_VARIABLES_ARGUMENTS, @@ -1241,7 +1246,7 @@ private List typedDispatch(Expression call, MethodInfo callee, Pa } ParameterizedType argumentType = receiver.parameters().get(index); if (argumentType.typeInfo() == null || argumentType.typeInfo().isJavaLangObject()) return List.of(pi); - List targets = new java.util.ArrayList<>(List.of(pi)); + List targets = new ArrayList<>(List.of(pi)); for (MethodInfo implementation : this.index.implementations.getOrDefault(callee, List.of())) { ParameterizedType type = implementation.parameters().get(pi.index()).parameterizedType(); if (type.typeInfo() == argumentType.typeInfo() && type.arrays() == argumentType.arrays()) { diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Nodes.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Nodes.java index 0ead7b2d8..30508b52d 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Nodes.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Nodes.java @@ -25,12 +25,16 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.expression.Assignment; import io.codelaser.maddi.cst.api.expression.Expression; +import io.codelaser.maddi.cst.api.expression.IntConstant; import io.codelaser.maddi.cst.api.expression.Lambda; import io.codelaser.maddi.cst.api.expression.MethodCall; +import io.codelaser.maddi.cst.api.expression.UnaryOperator; import io.codelaser.maddi.cst.api.expression.VariableExpression; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; @@ -168,14 +172,14 @@ && classTypeVariable(fr.fieldInfo()) >= 0 -> { // 'x.§$$s[-k]' is the k-th type argument's slice; -1 when the index is not such a constant private static int sliceIndex(DependentVariable dv) { Expression index = dv.indexExpression(); - if (index instanceof io.codelaser.maddi.cst.api.expression.UnaryOperator uo - && uo.expression() instanceof io.codelaser.maddi.cst.api.expression.IntConstant ic) { + if (index instanceof UnaryOperator uo + && uo.expression() instanceof IntConstant ic) { return ic.constant() - 1; } - if (index instanceof io.codelaser.maddi.cst.api.expression.IntConstant ic && ic.constant() < 0) { + if (index instanceof IntConstant ic && ic.constant() < 0) { return -ic.constant() - 1; } - java.util.regex.Matcher m = java.util.regex.Pattern.compile("\\[-(\\d+)]$").matcher(dv.simpleName()); + Matcher m = Pattern.compile("\\[-(\\d+)]$").matcher(dv.simpleName()); return m.find() ? Integer.parseInt(m.group(1)) - 1 : -1; } diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NonNullFacts.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NonNullFacts.java index a284a978a..4404d1889 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NonNullFacts.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NonNullFacts.java @@ -18,12 +18,15 @@ package io.codelaser.maddi.modification.analyzer.nullability; import java.util.ArrayList; +import java.util.Collections; import java.util.HashSet; import java.util.IdentityHashMap; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.BiPredicate; import java.util.function.Function; +import java.util.function.Predicate; import io.codelaser.maddi.cst.api.expression.*; import io.codelaser.maddi.cst.api.info.FieldInfo; @@ -36,6 +39,7 @@ import io.codelaser.maddi.cst.api.variable.DependentVariable; import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.LocalVariable; +import io.codelaser.maddi.cst.api.variable.This; import io.codelaser.maddi.cst.api.variable.Variable; /** @@ -80,7 +84,7 @@ public final class NonNullFacts { // CodeLaser/maddi-mod#48 A5: per private instance method, the fields of this non-null at every call of it walked // (a call that does not qualify adds none); the calls and method references walked (fieldsAtCalls) private final Map> atCalls = new IdentityHashMap<>(); - private final Set callsWalked = java.util.Collections.newSetFromMap(new IdentityHashMap<>()); + private final Set callsWalked = Collections.newSetFromMap(new IdentityHashMap<>()); // per private instance method, the fields of this non-null at its entry (withFieldsAtEntry) private Map> fieldsAtEntry = Map.of(); // gate NOENTRYFIELDS (with NullabilityPass's): forget at a compound statement as before #48 A5 (A/B) @@ -109,11 +113,11 @@ public final class NonNullFacts { // null-check predicates ('StringUtils.isNotBlank(s)'), as conditions; never for Kotlin's smart casts private NullPredicates predicates; // is the member (a getter, a field) non-null on every instance of the type? (Narrowing, CodeLaser/maddi-mod#22 gap 3) - private java.util.function.BiPredicate narrowedNonNull; - private java.util.function.BiPredicate narrowedInMethod; + private BiPredicate narrowedNonNull; + private BiPredicate narrowedInMethod; // the pass's verdict on a value, once its closure is known: no null of the analysis reaches it (gap 7); null // while the pass builds its graph - private java.util.function.Predicate notNullable; + private Predicate notNullable; /** * @param parameterContract the contract on a callee's parameter (NONNULL: passing null throws), or null @@ -141,7 +145,7 @@ public NonNullFacts withPredicates(NullPredicates predicates) { * A read narrowed by the receiver's type ({@link Narrowing}): {@code nonNull.test(member, type)} says that * {@code x.member} is not null on any instance of {@code type}. Not in {@link #kotlinSmartCasts()}. */ - public NonNullFacts withNarrowedReads(java.util.function.BiPredicate nonNull) { + public NonNullFacts withNarrowedReads(BiPredicate nonNull) { this.narrowedNonNull = nonNull; return this; } @@ -150,7 +154,7 @@ public NonNullFacts withNarrowedReads(java.util.function.BiPredicate nonNull) { + public NonNullFacts withNarrowedInMethod(BiPredicate nonNull) { this.narrowedInMethod = nonNull; return this; } @@ -161,7 +165,7 @@ public NonNullFacts withNarrowedInMethod(java.util.function.BiPredicate notNullable) { + public NonNullFacts withNotNullable(Predicate notNullable) { this.notNullable = notNullable; return this; } @@ -180,13 +184,13 @@ public NonNullFacts withFieldsAtEntry(Map> fieldsAtEnt * Does a call through {@code super} to this method return non-null? Such a call runs the method's own body, not * an override's: what null its overrides return does not reach it. */ - public NonNullFacts withSuperCalls(java.util.function.Predicate superCallNonNull) { + public NonNullFacts withSuperCalls(Predicate superCallNonNull) { this.superCallNonNull = superCallNonNull; return this; } // null when not given (withSuperCalls) - private java.util.function.Predicate superCallNonNull; + private Predicate superCallNonNull; /** The same walk, restricted to what Kotlin's smart cast derives (class comment); walk it before use. */ public NonNullFacts kotlinSmartCasts() { @@ -401,7 +405,7 @@ private Out statement(Statement statement, Set in) { effects(eas.expression(), facts); return new Out(facts, true); } - case io.codelaser.maddi.cst.api.statement.ExplicitConstructorInvocation eci -> { + case ExplicitConstructorInvocation eci -> { // 'super(parent.getRetrievalSemantics())' dereferences parent before the body runs (timefold // BavetAbstractConstraintStream: its parameter is non-null whenever the constructor completes) // Not for Kotlin's smart casts: the supertype call's arguments are in the class header, and an init @@ -819,7 +823,7 @@ private void presentAtCalleeExit(MethodCall mc, Set facts) { MethodInfo callee = mc.methodInfo(); if (kotlinSmartCasts || callee == null || callee.isStatic() || mc.object() != null && !(unwrap(mc.object()) instanceof VariableExpression ve - && ve.variable() instanceof io.codelaser.maddi.cst.api.variable.This)) return; + && ve.variable() instanceof This)) return; for (Variable v : atExit.getOrDefault(callee, Set.of())) { if (v instanceof KeyPresence kp && kp.map() instanceof FieldReference fr && fr.scopeIsRecursivelyThis() && kp.key() instanceof ParameterInfo p && p.methodInfo() == callee @@ -1003,7 +1007,7 @@ private void fieldsEnsured(MethodCall mc, Set facts) { if (kotlinSmartCasts || callee == null || callee.isStatic() || walking == null || !callee.typeInfo().equals(walking.typeInfo())) return; if (mc.object() != null && !(unwrap(mc.object()) instanceof VariableExpression ve - && ve.variable() instanceof io.codelaser.maddi.cst.api.variable.This)) return; + && ve.variable() instanceof This)) return; if (!callee.access().isPrivate() && !callee.isFinal() && !callee.typeInfo().isFinal()) return; facts.addAll(fieldsAtExit.getOrDefault(callee, Set.of())); } @@ -1020,7 +1024,7 @@ private void callOfPrivate(Expression site, MethodInfo callee, Set fac if (facts != null && walking != null && callee.typeInfo().equals(walking.typeInfo()) && site instanceof MethodCall mc && (mc.object() == null || unwrap(mc.object()) instanceof VariableExpression ve - && ve.variable() instanceof io.codelaser.maddi.cst.api.variable.This)) { + && ve.variable() instanceof This)) { for (Variable v : facts) { if (v instanceof FieldReference fr && fr.scopeIsThis() && !fr.fieldInfo().isStatic()) fields.add(v); } @@ -1078,7 +1082,7 @@ private static boolean reachesThis(Expression call) { if (found[0]) return false; if (x instanceof Lambda || x instanceof MethodReference || x instanceof ConstructorCall cc && cc.anonymousClass() != null - || x instanceof VariableExpression ve && ve.variable() instanceof io.codelaser.maddi.cst.api.variable.This) { + || x instanceof VariableExpression ve && ve.variable() instanceof This) { found[0] = true; return false; } @@ -1293,7 +1297,7 @@ private Set predicated(MethodCall mc, NullPredicates.When when) { if (mc.parameterExpressions().isEmpty() && walking != null && mc.methodInfo().typeInfo().equals(walking.typeInfo()) && (mc.object() == null || unwrap(mc.object()) instanceof VariableExpression ve - && ve.variable() instanceof io.codelaser.maddi.cst.api.variable.This)) { + && ve.variable() instanceof This)) { set.addAll(predicates.fieldsNonNullWhen(mc.methodInfo(), when == NullPredicates.When.FALSE_IF_NULL)); } List arguments = mc.parameterExpressions(); @@ -1346,7 +1350,7 @@ static Expression unwrap(Expression e) { static boolean superCall(MethodCall mc) { return mc.object() instanceof VariableExpression ve - && ve.variable() instanceof io.codelaser.maddi.cst.api.variable.This t && t.writeSuper(); + && ve.variable() instanceof This t && t.writeSuper(); } /** Is the value of {@code e} certainly not null, given the facts? */ @@ -1357,7 +1361,7 @@ boolean nonNull(Expression e, Set facts) { case NullConstant _ -> false; case ConstructorCall _, StringConstant _, StringConcat _, ArrayInitializer _, Lambda _, MethodReference _, ClassExpression _, ConstantExpression _ -> true; // NullConstant is handled above - case VariableExpression ve -> ve.variable() instanceof io.codelaser.maddi.cst.api.variable.This + case VariableExpression ve -> ve.variable() instanceof This || facts.contains(ve.variable()) || notNullable != null && !kotlinSmartCasts && notNullable.test(ve); // each branch with its condition's facts: 'key = appName != null ? appName : NO_APP_NAME' (#48 A3, nacos diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullGraph.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullGraph.java index b74c8668b..3366a09e4 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullGraph.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullGraph.java @@ -19,17 +19,22 @@ import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Deque; import java.util.HashMap; import java.util.HashSet; import java.util.IdentityHashMap; +import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Predicate; import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.expression.Assignment; @@ -47,6 +52,7 @@ import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.DependentVariable; import io.codelaser.maddi.cst.api.variable.LocalVariable; +import io.codelaser.maddi.modification.common.util.Culprits; /** * The graph of one round of the nullability pass: its nodes (fields, parameters, methods standing for their return, @@ -85,7 +91,7 @@ final class NullGraph { final Map> pendingHolders = new LinkedHashMap<>(); final Map> successors = new LinkedHashMap<>(); - final boolean recordSites = io.codelaser.maddi.modification.common.util.Culprits.ENABLED; + final boolean recordSites = Culprits.ENABLED; final Map> edgeSites = new HashMap<>(); // the analysed method a local belongs to (a lambda's local: the method the lambda is in) final Map localOwner = new HashMap<>(); @@ -348,8 +354,8 @@ private Set tiedToNonNullSlots() { } if (why != null) { try { - java.nio.file.Files.write(java.nio.file.Path.of(TypeUses.NULL_MARKED_DEBUG + ".tied"), why); - } catch (java.io.IOException ignored) { + Files.write(Path.of(TypeUses.NULL_MARKED_DEBUG + ".tied"), why); + } catch (IOException ignored) { } } return tiedToNonNull; @@ -460,7 +466,7 @@ Set closure(Map cause, Set seeds, Set st getInteger(key) calls getInteger(key, null): only that call's result is nullable, not 'getInteger(KEY, 5)'. */ boolean callResultNullable(MethodInfo callee, int call, Set reached, - java.util.function.Predicate isReached, + Predicate isReached, Map intrinsicMemo) { if (GAP9_OFF.get() || !argumentsSeen.contains(call)) return true; Set through = passThrough(callee); @@ -626,7 +632,7 @@ private Set readOnlyArrayParameters() { boolean changed = true; while (changed) { changed = false; - for (java.util.Iterator it = candidates.iterator(); it.hasNext(); ) { + for (Iterator it = candidates.iterator(); it.hasNext(); ) { ParameterInfo pi = it.next(); for (Object to : out.getOrDefault(pi, Set.of())) { if (to instanceof ParameterInfo target && (candidates.contains(target) || index.library(target))) continue; diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullPredicates.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullPredicates.java index 6ee1ab0fd..dcd65e958 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullPredicates.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullPredicates.java @@ -18,14 +18,17 @@ package io.codelaser.maddi.modification.analyzer.nullability; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Supplier; import io.codelaser.maddi.cst.api.expression.*; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.statement.*; +import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.Variable; /** @@ -118,7 +121,7 @@ public Set fieldsNonNullWhen(MethodInfo method, boolean result) { Map tests = fieldTests.get(method); if (tests == null) return Set.of(); When neverForNull = result ? When.FALSE_IF_NULL : When.TRUE_IF_NULL; - Set set = new java.util.HashSet<>(); + Set set = new HashSet<>(); tests.forEach((field, when) -> { if (when == neverForNull) set.add(field); }); @@ -127,13 +130,13 @@ public Set fieldsNonNullWhen(MethodInfo method, boolean result) { // the fields of this compared with null in the body private static Set testedFields(MethodInfo m) { - Set fields = new java.util.HashSet<>(); + Set fields = new HashSet<>(); m.methodBody().visit(e -> { if (e instanceof BinaryOperator bo && (operator(bo, "==") || operator(bo, "!="))) { Expression other = bo.lhs() instanceof NullConstant ? bo.rhs() : bo.rhs() instanceof NullConstant ? bo.lhs() : null; if (other != null && NonNullFacts.unwrap(other) instanceof VariableExpression ve - && ve.variable() instanceof io.codelaser.maddi.cst.api.variable.FieldReference fr + && ve.variable() instanceof FieldReference fr && fr.scopeIsThis() && !fr.fieldInfo().isStatic()) { fields.add(ve.variable()); } @@ -276,14 +279,14 @@ case BinaryOperator bo when operator(bo, "||") -> { } // 'a && b': b is evaluated only when a is true; false whenever either is - private static Boolean and(Boolean a, java.util.function.Supplier b) { + private static Boolean and(Boolean a, Supplier b) { if (a == Boolean.FALSE) return false; Boolean vb = b.get(); if (a == Boolean.TRUE) return vb; return vb == Boolean.FALSE ? Boolean.FALSE : null; } - private static Boolean or(Boolean a, java.util.function.Supplier b) { + private static Boolean or(Boolean a, Supplier b) { if (a == Boolean.TRUE) return true; Boolean vb = b.get(); if (a == Boolean.FALSE) return vb; diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityComparison.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityComparison.java index bc19a2c04..280a5ab98 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityComparison.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityComparison.java @@ -17,6 +17,7 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import java.util.Arrays; import java.util.EnumMap; import java.util.Map; import java.util.stream.Collectors; @@ -104,13 +105,13 @@ public String report() { Map m = counts.getOrDefault(kind, Map.of()).getOrDefault(depth, Map.of()); if (m.isEmpty()) continue; sb.append(kind).append('/').append(depth).append(' ') - .append(java.util.Arrays.stream(Outcome.values()) + .append(Arrays.stream(Outcome.values()) .map(o -> o.name().toLowerCase() + "=" + m.getOrDefault(o, 0)) .collect(Collectors.joining(" "))) .append('\n'); } } - return sb.append("TOTAL ").append(java.util.Arrays.stream(Outcome.values()) + return sb.append("TOTAL ").append(Arrays.stream(Outcome.values()) .map(o -> o.name().toLowerCase() + "=" + count(o)).collect(Collectors.joining(" "))).toString(); } } diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityPass.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityPass.java index 3b63feae5..6f2ac82a2 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityPass.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityPass.java @@ -20,6 +20,7 @@ import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.IdentityHashMap; @@ -27,6 +28,9 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.BiPredicate; +import java.util.function.Predicate; +import java.util.stream.Collectors; import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.Value; @@ -46,6 +50,7 @@ import io.codelaser.maddi.cst.impl.analysis.NullAnnotations; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.common.util.Culprits; /** * Declaration nullability as reachability over the converged link facts (docs/design/nullability.md §4.1, M3). @@ -182,7 +187,7 @@ public Report go(List analysisOrder) { Set nextPresent = pass.nextPresentLookups; if (next.equals(trusted) && nextPreconditions.equals(nonNullAtExit) && nextNarrowed.equals(narrowedReads) && nextAtEntry.equals(atEntry) && nextPresent.equals(present) || round == MAX_ROUNDS) { - if (io.codelaser.maddi.modification.common.util.Culprits.ENABLED) pass.writeCulprits(report); + if (Culprits.ENABLED) pass.writeCulprits(report); return report; } trusted = next; @@ -204,7 +209,7 @@ private static Map> fieldsAtEntry(NonNullFacts walked, List fields) { if (ENTRY_FIELDS_OFF.get()) return Map.of(); Set unwalked = new HashSet<>(); - java.util.function.Predicate uses = e -> { + Predicate uses = e -> { MethodInfo callee = e instanceof MethodCall mc ? mc.methodInfo() : e instanceof MethodReference mr ? mr.methodInfo() : null; if (callee != null && NonNullFacts.privateInstanceMethod(callee) && !walked.walked((Expression) e)) { @@ -248,13 +253,13 @@ private Report once(List analysisOrder) { for (MethodInfo mi : methods) if (mi.methodBody() != null) seeds.indexFills(mi.methodBody()); for (MethodInfo mi : methods) { for (MethodInfo overridden : overrides(mi)) { - index.implementations.computeIfAbsent(overridden, _ -> new java.util.ArrayList<>()).add(mi); + index.implementations.computeIfAbsent(overridden, _ -> new ArrayList<>()).add(mi); } } index.indexFunctionals(methods); index.indexKeyedMaps(methods, fields); NullPredicates predicates = NullPredicates.infer(methods); - java.util.function.BiPredicate narrowedReads = narrowed.isEmpty() ? null : narrowed::nonNull; + BiPredicate narrowedReads = narrowed.isEmpty() ? null : narrowed::nonNull; // 2. the facts the walk reads, and the parts that read them facts = new NonNullFacts(contracts::parameterContract, contracts::returnContract) .withPredicates(predicates) @@ -295,7 +300,7 @@ private Report once(List analysisOrder) { Set reachedBefore = reached; // the printers report only these: elsewhere the parameter is non-null without the policy preconditionsNonNull = declared.stream().filter(reachedBefore::contains) - .collect(java.util.stream.Collectors.toUnmodifiableSet()); + .collect(Collectors.toUnmodifiableSet()); if (!declared.isEmpty()) { contracts.addAll(declared); cause.clear(); @@ -322,7 +327,7 @@ private Report once(List analysisOrder) { // 9. the use sites, as the printers ask them NonNullFacts smartCasts = facts.kotlinSmartCasts(); methods.forEach(smartCasts::walk); - Set nonNullCallResults = java.util.Collections.newSetFromMap(new IdentityHashMap<>()); + Set nonNullCallResults = Collections.newSetFromMap(new IdentityHashMap<>()); Map intrinsic = new HashMap<>(); Set finalReached = reached; graph.callIds.forEach((call, id) -> { @@ -342,7 +347,7 @@ private Report once(List analysisOrder) { methods.forEach(useSites::walk); nextFieldsAtEntry = fieldsAtEntry(useSites, methods, fields); if (!ROUND_KEYS_OFF.get()) { - Set present = java.util.Collections.newSetFromMap(new IdentityHashMap<>()); + Set present = Collections.newSetFromMap(new IdentityHashMap<>()); for (MethodCall lookup : contracts.lookups) if (useSites.keyPresentWhenCalled(lookup)) present.add(lookup); nextPresentLookups = present; } @@ -369,8 +374,8 @@ private void writeCulprits(Report report) { Object from = report.cause().get(at); Site site = graph.edgeSites.getOrDefault(from, Map.of()).get(at); if (site != null) { - io.codelaser.maddi.modification.common.util.Culprits.add(steps, - io.codelaser.maddi.modification.common.util.Culprits.step(site.in(), site.element(), + Culprits.add(steps, + Culprits.step(site.in(), site.element(), Trace.culpritText(site.element()))); } at = from; @@ -378,8 +383,8 @@ private void writeCulprits(Report report) { String origin = report.seedOrigin().get(at); Site seed = seeds.seedSites.get(at); if (seed != null) { - io.codelaser.maddi.modification.common.util.Culprits.add(steps, - io.codelaser.maddi.modification.common.util.Culprits.step(seed.in(), seed.element(), + Culprits.add(steps, + Culprits.step(seed.in(), seed.element(), Trace.culpritText(seed.element()) + (origin == null ? "" : " (" + Trace.shorten(origin) + ")"))); } else if (origin != null) { steps.add(new Value.Culprit.Step(null, 0, 0, Trace.shorten(origin))); diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Preconditions.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Preconditions.java index 1fcc7b366..45281e359 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Preconditions.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Preconditions.java @@ -20,6 +20,7 @@ import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; import java.util.ArrayList; +import java.util.Collections; import java.util.HashSet; import java.util.IdentityHashMap; import java.util.LinkedHashSet; @@ -41,6 +42,7 @@ import io.codelaser.maddi.cst.api.statement.ExpressionAsStatement; import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.api.type.ParameterizedType; +import io.codelaser.maddi.cst.api.variable.This; /** * Parameters a null argument makes throw before their method completes (CodeLaser/maddi-mod#41), with the calls @@ -82,7 +84,7 @@ Set preconditions() { if (facts.nonNullAtExit(mi, pi)) set.add(pi); } } - Set> distinct = java.util.Collections.newSetFromMap(new IdentityHashMap<>()); + Set> distinct = Collections.newSetFromMap(new IdentityHashMap<>()); distinct.addAll(families.values()); for (Set family : distinct) familyPreconditions(family, set); return Set.copyOf(set); @@ -278,7 +280,7 @@ private static boolean passesToSuper(MethodInfo m, int index, Set to if (statement instanceof ExpressionAsStatement eas && eas.expression() instanceof MethodCall mc && to.contains(mc.methodInfo()) && index < mc.parameterExpressions().size() && mc.object() instanceof VariableExpression receiver - && receiver.variable() instanceof io.codelaser.maddi.cst.api.variable.This t && t.writeSuper() + && receiver.variable() instanceof This t && t.writeSuper() && NonNullFacts.unwrap(mc.parameterExpressions().get(index)) instanceof VariableExpression ve && pi.equals(ve.variable())) { return true; diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/ReadNarrowing.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/ReadNarrowing.java index 1943273d8..4b7210582 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/ReadNarrowing.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/ReadNarrowing.java @@ -25,7 +25,9 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Stream; +import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.expression.ArrayInitializer; import io.codelaser.maddi.cst.api.expression.Assignment; import io.codelaser.maddi.cst.api.expression.ConstantExpression; @@ -47,6 +49,7 @@ import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.FieldReference; +import io.codelaser.maddi.cst.api.variable.This; import io.codelaser.maddi.modification.prepwork.Util; /** @@ -125,9 +128,9 @@ private static TypeInfo parentOf(TypeInfo type) { } // the values a constructor's body assigns to 'this.fi' - private static java.util.stream.Stream assignmentsOf(MethodInfo constructor, FieldInfo fi) { + private static Stream assignmentsOf(MethodInfo constructor, FieldInfo fi) { Block body = constructor.methodBody(); - if (body == null) return java.util.stream.Stream.of(); + if (body == null) return Stream.of(); List values = new ArrayList<>(); body.visit(e -> { if (e instanceof Assignment a && a.variableTarget() instanceof FieldReference fr && fr.fieldInfo() == fi @@ -200,7 +203,7 @@ private NarrowedReads narrowedReads() { if (nullClasses.isEmpty()) return NarrowedReads.NONE; Map getters = new HashMap<>(); for (MethodInfo mi : index.analysed) { - io.codelaser.maddi.cst.api.analysis.Value.FieldValue fv = mi.getSetField(); + Value.FieldValue fv = mi.getSetField(); if (fv == null || fv.field() == null || fv.setter() || fv.hasIndex() || mi.isStatic() || !mi.parameters().isEmpty() || index.implementations.containsKey(mi) || !nullClasses.containsKey(fv.field())) continue; @@ -297,7 +300,7 @@ private boolean mayBeNull(Expression e, Map env) { return switch (x) { case VariableExpression ve -> switch (ve.variable()) { case ParameterInfo pi -> env.containsKey(pi) ? env.get(pi) : reached.contains(pi) || external.contains(pi); - case io.codelaser.maddi.cst.api.variable.This _ -> false; + case This _ -> false; case FieldReference fr when !Util.virtual(fr) -> reached.contains(fr.fieldInfo()) || external.contains(fr.fieldInfo()); default -> true; diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Report.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Report.java index db9d9811b..08e43c330 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Report.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Report.java @@ -29,6 +29,7 @@ import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.info.TypeParameter; import io.codelaser.maddi.cst.api.statement.ForEachStatement; import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.api.type.ParameterizedType; @@ -65,7 +66,7 @@ public record Report(Map verdicts, Map nonNullCallResults, Set preconditions, List nullArguments, Set preconditionsNonNull, Set rejectsNull, Set writtenReach, - Set nonNullTypeParameters, + Set nonNullTypeParameters, Map parentClasses) implements NullabilityFacts { @@ -77,7 +78,7 @@ public ParameterizedType parentClass(TypeInfo typeInfo) { /** Kotlin: a class or method type parameter the verdicts hold non-null ({@link TypeUses#nonNullBounds}): the printer bounds it by Any. */ @Override - public boolean nonNullTypeParameter(io.codelaser.maddi.cst.api.info.TypeParameter typeParameter) { + public boolean nonNullTypeParameter(TypeParameter typeParameter) { return nonNullTypeParameters.contains(typeParameter); } diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Seeds.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Seeds.java index 2b63aadb6..428b14c1c 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Seeds.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Seeds.java @@ -20,8 +20,10 @@ import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.IdentityHashMap; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; @@ -29,10 +31,12 @@ import java.util.Set; import io.codelaser.maddi.cst.api.expression.ArrayInitializer; +import io.codelaser.maddi.cst.api.expression.ArrayLength; import io.codelaser.maddi.cst.api.expression.Assignment; import io.codelaser.maddi.cst.api.expression.BinaryOperator; import io.codelaser.maddi.cst.api.expression.ConstructorCall; import io.codelaser.maddi.cst.api.expression.Expression; +import io.codelaser.maddi.cst.api.expression.IntConstant; import io.codelaser.maddi.cst.api.expression.Lambda; import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.expression.NullConstant; @@ -45,6 +49,7 @@ import io.codelaser.maddi.cst.api.statement.ExpressionAsStatement; import io.codelaser.maddi.cst.api.statement.ForEachStatement; import io.codelaser.maddi.cst.api.statement.ForStatement; +import io.codelaser.maddi.cst.api.statement.IfElseStatement; import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; import io.codelaser.maddi.cst.api.statement.ReturnStatement; import io.codelaser.maddi.cst.api.statement.Statement; @@ -53,6 +58,7 @@ import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.LocalVariable; import io.codelaser.maddi.cst.api.variable.Variable; +import io.codelaser.maddi.modification.common.util.Culprits; /** * Where null enters the graph: a seed is a node that may be null by itself, with its origin (the cause chains end @@ -64,7 +70,7 @@ final class Seeds { private final Index index; // Culprits: the statement the walk is at, where a seed recorded now comes from private final WalkSite site; - private final boolean recordSites = io.codelaser.maddi.modification.common.util.Culprits.ENABLED; + private final boolean recordSites = Culprits.ENABLED; Seeds(Trace trace, Index index, WalkSite site) { this.trace = trace; @@ -74,9 +80,9 @@ final class Seeds { // each null literal of an analysed body, by identity: a NullConstant equals every other, a Source only compares // line and column; a marker whose literal is not found here (a decoded summary) is seeded where it arrives - private final Map nullOwners = new java.util.IdentityHashMap<>(); + private final Map nullOwners = new IdentityHashMap<>(); // array creations ('new T[n]') the next statement fills completely before anything reads them (indexFills) - private final Set filledCreations = java.util.Collections.newSetFromMap(new java.util.IdentityHashMap<>()); + private final Set filledCreations = Collections.newSetFromMap(new IdentityHashMap<>()); // gate NOFIELDFILL: only a local's declaration counts as the creation the next loop fills (A/B for CodeLaser/maddi-mod#22 gap 4) private static final Switches.Gate FIELD_FILLS_OFF = Switches.gate("NOFIELDFILL"); // nodes seeded by a null that is written (a literal, an argument, an initializer, an annotation), not by indirect @@ -150,7 +156,7 @@ private static int arrayCreatedWithNulls(Expression value) { if (type == null || type.arrays() == 0) return 0; List sizes = cc.parameterExpressions().stream().filter(e -> !e.isEmpty()).toList(); // 'new T[0]': no elements (guava's EMPTY_ARRAY) - if (!sizes.isEmpty() && sizes.getFirst() instanceof io.codelaser.maddi.cst.api.expression.IntConstant ic + if (!sizes.isEmpty() && sizes.getFirst() instanceof IntConstant ic && ic.constant() == 0) return 0; int dimensions = sizes.size(); if (dimensions > 0 && dimensions < type.arrays()) return dimensions; @@ -233,18 +239,18 @@ private static boolean fills(ForStatement loop, Variable array, if (loop.initializers().size() != 1 || !(loop.initializers().getFirst() instanceof LocalVariableCreation init) || init.localVariableStream().count() != 1) return false; LocalVariable index = init.localVariableStream().findFirst().orElseThrow(); - if (!(index.assignmentExpression() instanceof io.codelaser.maddi.cst.api.expression.IntConstant zero) + if (!(index.assignmentExpression() instanceof IntConstant zero) || zero.constant() != 0) return false; if (!(NonNullFacts.unwrap(loop.expression()) instanceof BinaryOperator bo) || bo.operator() == null || !"<".equals(bo.operator().name()) || !isVariable(bo.lhs(), index)) return false; Expression bound = NonNullFacts.unwrap(bo.rhs()); boolean sameBound = bound.equals(NonNullFacts.unwrap(size)) - || bound instanceof io.codelaser.maddi.cst.api.expression.ArrayLength length + || bound instanceof ArrayLength length && isVariable(length.scope(), array); if (!sameBound || loop.updaters().size() != 1 || !(loop.updaters().getFirst() instanceof Assignment step) || !index.equals(step.variableTarget()) || !step.assignmentOperatorIsPlus() || step.prefixPrimitiveOperator() == null - && !(step.value() instanceof io.codelaser.maddi.cst.api.expression.IntConstant one && one.constant() == 1)) { + && !(step.value() instanceof IntConstant one && one.constant() == 1)) { return false; } boolean[] escapes = {false}; @@ -298,7 +304,7 @@ private static boolean countedFill(List statements, int creation, Var if (st instanceof LocalVariableCreation lvc) { for (LocalVariable lv : lvc.localVariableStream().toList()) { if (lv.parameterizedType().isInt() && lv.assignmentExpression() instanceof - io.codelaser.maddi.cst.api.expression.IntConstant zero && zero.constant() == 0) { + IntConstant zero && zero.constant() == 0) { counters.add(lv); } } @@ -310,12 +316,12 @@ private static boolean countedFill(List statements, int creation, Var // 'if (n == 0) return ...;' without else: the array has no element yet to fill private static boolean emptyReturn(Statement st, Variable sizeLocal, Expression sizeCall) { - if (!(st instanceof io.codelaser.maddi.cst.api.statement.IfElseStatement ifs) + if (!(st instanceof IfElseStatement ifs) || ifs.elseBlock() != null && !ifs.elseBlock().isEmpty() || ifs.block().statements().size() != 1 || !(ifs.block().statements().getFirst() instanceof ReturnStatement) || !(NonNullFacts.unwrap(ifs.expression()) instanceof BinaryOperator bo) || bo.operator() == null || !"==".equals(bo.operator().name()) - || !(NonNullFacts.unwrap(bo.rhs()) instanceof io.codelaser.maddi.cst.api.expression.IntConstant zero) + || !(NonNullFacts.unwrap(bo.rhs()) instanceof IntConstant zero) || zero.constant() != 0) return false; Expression lhs = NonNullFacts.unwrap(bo.lhs()); return sizeLocal != null ? isVariable(lhs, sizeLocal) : lhs.equals(sizeCall); diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Tolerance.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Tolerance.java index 4b3af30d5..d34ced18d 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Tolerance.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Tolerance.java @@ -20,12 +20,14 @@ import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; import java.util.ArrayDeque; +import java.util.ArrayList; import java.util.Deque; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Predicate; import java.util.stream.IntStream; import io.codelaser.maddi.cst.api.expression.VariableExpression; @@ -286,7 +288,7 @@ that ignores the parameter (an empty hook is no evidence), nor one without a bod */ private List toleratingOverrides(MethodInfo m, ParameterInfo pi) { if (OVERRIDE_TOLERATES_OFF.get()) return List.of(); - List out = new java.util.ArrayList<>(); + List out = new ArrayList<>(); for (MethodInfo o : index.implementations.getOrDefault(m, List.of())) { if (!hasBody(o) || o.parameters().size() <= pi.index()) continue; ParameterInfo op = o.parameters().get(pi.index()); @@ -346,7 +348,7 @@ anonymous or local class m encloses, which captures m's variables: langchain4j L (#68: 5 C# warnings, test-manager 2026-10-30). A lambda's body is m's own (NonNullFacts.demands). Gate NOENCLOSEDDEMANDS. */ - private boolean demanded(MethodInfo m, java.util.function.Predicate variable) { + private boolean demanded(MethodInfo m, Predicate variable) { for (MethodInfo mi = m; mi != null; mi = mi.typeInfo().enclosingMethod()) { if (facts.demands(mi).stream().anyMatch(variable)) return true; } diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/TypeUses.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/TypeUses.java index 7ce8fa8f0..662cb28cc 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/TypeUses.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/TypeUses.java @@ -19,14 +19,19 @@ import static io.codelaser.maddi.modification.analyzer.nullability.Types.*; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; import io.codelaser.maddi.cst.api.element.Element; +import io.codelaser.maddi.cst.api.expression.AnnotationExpression; import io.codelaser.maddi.cst.api.expression.Cast; import io.codelaser.maddi.cst.api.expression.ConstructorCall; import io.codelaser.maddi.cst.api.expression.Expression; @@ -37,6 +42,7 @@ import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.info.TypeParameter; import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; import io.codelaser.maddi.cst.api.type.NullableState; import io.codelaser.maddi.cst.api.type.ParameterizedType; @@ -63,7 +69,7 @@ passed into such a position ('X extends ImmutableList' in a test outside t would otherwise reject, and to any type variable used in such a position. guava LocalCache.kt:1102/1020, CollectCollectors.kt:24 (2026-10-18). Gate NONULLMARKEDBOUNDS. */ - final Set nonNullTypeParameters = new HashSet<>(); + final Set nonNullTypeParameters = new HashSet<>(); private static final Switches.Gate NULL_MARKED_BOUNDS_OFF = Switches.gate("NONULLMARKEDBOUNDS"); private static final Switches.Gate MEMBERLESS_BOUNDS_OFF = Switches.gate("NOMEMBERLESSBOUNDS"); @@ -78,7 +84,7 @@ void nonNullBounds(List analysisOrder, List methods, List types = new java.util.LinkedHashSet<>(); + Set types = new LinkedHashSet<>(); for (MethodInfo mi : methods) types.add(mi.typeInfo()); for (FieldInfo fi : fields) types.add(fi.owner()); // a type without members of its own too: 'interface NullComparatorFactory extends @@ -126,7 +132,7 @@ void nonNullBounds(List analysisOrder, List methods, List blocked = new HashSet<>(); + Set blocked = new HashSet<>(); while (true) { nonNullTypeParameters.clear(); for (TypeInfo t : types) { @@ -135,7 +141,7 @@ Where it cannot be (a @Nullable use, a library's type variable), the position is if (!nullableBound(tp) && !blocked.contains(tp)) nonNullTypeParameters.add(tp); } } - Set conflicts = new HashSet<>(); + Set conflicts = new HashSet<>(); boolean changed = true; while (changed) { changed = false; @@ -163,8 +169,8 @@ family member that cannot be bounded (not ours, blocked) leaves the position unb NOOVERRIDEBOUNDS. */ private boolean overrideFamilyBounds(List methods, - Set blocked, - Set conflicts) { + Set blocked, + Set conflicts) { boolean changed = false; for (MethodInfo mi : methods) { int n = mi.typeParameters().size(); @@ -196,7 +202,7 @@ private boolean overrideFamilyBounds(List methods, private static final Switches.Gate OVERRIDE_BOUNDS_OFF = Switches.gate("NOOVERRIDEBOUNDS"); - private final Map> packageInfoAnnotations + private final Map> packageInfoAnnotations = new HashMap<>(); // strict: a supertype, or a parameter an override repeats, where the printer cannot write 'B & Any' @@ -250,8 +256,8 @@ private static boolean bodyTypeUse(Element e, Info where, List uses, Li } private boolean carryNonNull(ParameterizedType use, Info where, boolean strict, Set types, - Set blocked, - Set conflicts) { + Set blocked, + Set conflicts) { if (use == null) return false; boolean changed = false; TypeInfo sup = use.typeInfo(); @@ -298,8 +304,8 @@ private boolean carryNonNull(ParameterizedType use, Info where, boolean strict, private boolean carryInstantiation(ParameterizedType declared, ParameterizedType concrete, MethodInfo callee, Info where, Set types, - Set blocked, - Set conflicts) { + Set blocked, + Set conflicts) { if (declared == null || concrete == null || declared.arrays() != concrete.arrays()) return false; var position = declared.typeParameter(); if (position != null) { @@ -338,7 +344,7 @@ private boolean carryInstantiation(ParameterizedType declared, ParameterizedType static final String NULL_MARKED_DEBUG = System.getenv("NULLMARKEDDEBUG"); private final List debugConflicts = new ArrayList<>(); - private void debugNullMarked(Set types, Set blocked) { + private void debugNullMarked(Set types, Set blocked) { List lines = new ArrayList<>(debugConflicts); lines.add("blocked " + blocked.size() + ", non-null " + nonNullTypeParameters.size() + ", package-infos " + packageInfoAnnotations.size()); @@ -349,13 +355,13 @@ private void debugNullMarked(Set types, Set' (or any @Nullable bound) - private static boolean nullableBound(io.codelaser.maddi.cst.api.info.TypeParameter tp) { + private static boolean nullableBound(TypeParameter tp) { return tp.typeBounds().stream().anyMatch(b -> explicit(b.annotations()) == NullableState.NULLABLE); } @@ -375,7 +381,7 @@ private boolean nullMarked(TypeInfo type) { return Boolean.TRUE.equals(marked); } - private static Boolean markedBy(List annotations) { + private static Boolean markedBy(List annotations) { if (annotations.stream().anyMatch(a -> a.typeInfo() != null && "NullUnmarked".equals(a.typeInfo().simpleName()))) { return false; } diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Types.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Types.java index f8c9f1322..bdb113e0b 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Types.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/nullability/Types.java @@ -22,6 +22,7 @@ import java.util.Set; import io.codelaser.maddi.cst.api.analysis.Property; +import io.codelaser.maddi.cst.api.expression.AnnotationExpression; import io.codelaser.maddi.cst.api.expression.ConstructorCall; import io.codelaser.maddi.cst.api.expression.Expression; import io.codelaser.maddi.cst.api.expression.InlineConditional; @@ -85,9 +86,9 @@ static boolean hasBody(MethodInfo m) { return !m.isAbstract() && m.methodBody() != null; } - static NullableState explicit(List list) { + static NullableState explicit(List list) { boolean nonNull = false; - for (io.codelaser.maddi.cst.api.expression.AnnotationExpression ae : list) { + for (AnnotationExpression ae : list) { String name = ae.typeInfo().simpleName(); if (NullAnnotations.NULLABLE.contains(name)) return NullableState.NULLABLE; if (NullAnnotations.NON_NULL.contains(name)) nonNull = true; diff --git a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/shadow/ShadowModificationPass.java b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/shadow/ShadowModificationPass.java index 032d89609..8be48cfe4 100644 --- a/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/shadow/ShadowModificationPass.java +++ b/maddi-modification-analyzer/src/main/java/io/codelaser/maddi/modification/analyzer/shadow/ShadowModificationPass.java @@ -4,10 +4,13 @@ import static io.codelaser.maddi.modification.prepwork.callgraph.ComputePartOfConstructionFinalField.PART_OF_CONSTRUCTION; import java.util.*; +import java.util.function.BiConsumer; +import java.util.function.Predicate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.PropertyValueMap; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.Element; @@ -15,14 +18,17 @@ import io.codelaser.maddi.cst.api.expression.AnnotationExpression; import io.codelaser.maddi.cst.api.expression.Assignment; import io.codelaser.maddi.cst.api.expression.ConstructorCall; +import io.codelaser.maddi.cst.api.expression.Expression; import io.codelaser.maddi.cst.api.expression.Lambda; import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.expression.MethodReference; +import io.codelaser.maddi.cst.api.expression.TypeExpression; import io.codelaser.maddi.cst.api.expression.VariableExpression; import io.codelaser.maddi.cst.api.info.*; import io.codelaser.maddi.cst.api.statement.Block; import io.codelaser.maddi.cst.api.statement.LocalTypeDeclaration; import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.DependentVariable; import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.LocalVariable; @@ -34,6 +40,7 @@ import io.codelaser.maddi.modification.common.util.Culprits; import io.codelaser.maddi.modification.common.util.OwnStaticState; import io.codelaser.maddi.modification.link.LinkComputer; +import io.codelaser.maddi.modification.link.impl.Gate; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; import io.codelaser.maddi.modification.link.impl.LinkVariable; @@ -246,7 +253,7 @@ public Report go(List analysisOrder) { } private void diff(List divergences, List reverse, String propertyName, - PropertyValueMap analysis, io.codelaser.maddi.cst.api.analysis.Property property, + PropertyValueMap analysis, Property property, boolean reached, Info info, String detail) { Value.Bool frozen = analysis.getOrNull(property, ValueImpl.BoolImpl.class); if (frozen == null || !frozen.hasAValue()) return; // undecided: nothing to diff against @@ -279,7 +286,7 @@ private void buildForMethod(MethodInfo mi) { // stricter than the engine, downgrading e.g. Element.annotations() (default body // List.of()) to the dispatch union the engine deliberately does not compute. for (MethodInfo overridden : mi.overrides()) { - if (!io.codelaser.maddi.modification.prepwork.Util.unionOverImplementations(overridden)) continue; + if (!Util.unionOverImplementations(overridden)) continue; // An OUT-OF-ORDER abstract (jar/aapi) with a decided TRUE is authority, not fixpoint // optimism: writeVerdicts never visits it, no union is computed over it, and an E6 edge // into it would teleport ONE implementation's evidence to EVERY call site of the @@ -323,7 +330,7 @@ private void buildForMethod(MethodInfo mi) { taintUnprojected(mi, "no METHOD_LINKS"); // no summary at all: no evidence for this method's own nodes (§10.1) return; } - if (io.codelaser.maddi.modification.prepwork.Util.unionOverImplementations(mi)) { + if (Util.unionOverImplementations(mi)) { // (a throw-only placeholder too: its body is no evidence for a call that completes, work list O2) // no body, no local evidence: the shallow mlv conservatively claims "modified" where the // frozen property holds the precise union-over-implementations value. P3 refinement, by @@ -517,7 +524,7 @@ private void seedStatementLevelFieldModifications(MethodInfo mi, Set } /** #25: is the structural twin of a modification property decided TRUE? Absent, it falls back to the deep one. */ - private static boolean twinTrue(PropertyValueMap analysis, io.codelaser.maddi.cst.api.analysis.Property twin) { + private static boolean twinTrue(PropertyValueMap analysis, Property twin) { Value.Bool s = analysis.getOrNull(twin, ValueImpl.BoolImpl.class); return s != null && s.isTrue(); } @@ -570,7 +577,7 @@ private boolean bodyIsOpaque(MethodInfo mi) { if (opaque[0]) return false; // only a BOUND method reference (this::m, local::m, field::m) captures a receiver whose // deferred modification the walk cannot see; an unbound/static one (Type::m) does not - if (e instanceof MethodReference mr && !(mr.scope() instanceof io.codelaser.maddi.cst.api.expression.TypeExpression) + if (e instanceof MethodReference mr && !(mr.scope() instanceof TypeExpression) || e instanceof ConstructorCall cc && cc.anonymousClass() != null || e instanceof LocalTypeDeclaration) { opaque[0] = true; @@ -655,7 +662,7 @@ private void seedVariable(MethodInfo mi, Variable v, boolean skipReceiverRooted, private boolean walkable(MethodInfo method) { return walkableCache.computeIfAbsent(method, m -> orderMethods.contains(m) && m.methodBody() != null && !m.methodBody().isEmpty() - && !io.codelaser.maddi.modification.prepwork.Util.unionOverImplementations(m) + && !Util.unionOverImplementations(m) && !bodyIsOpaque(m)); } @@ -676,7 +683,7 @@ private boolean carried(MethodInfo method) { /** an in-order abstract with implementations, all in order and overriding it: its union is the E6 edges' */ private boolean e6Rederivable(MethodInfo method) { if (!orderMethods.contains(method) - || !io.codelaser.maddi.modification.prepwork.Util.unionOverImplementations(method) + || !Util.unionOverImplementations(method) || explicitlyContractedModified(method)) return false; Value.SetOfMethodInfo impls = method.analysis().getOrDefault(PropertyImpl.IMPLEMENTATIONS, ValueImpl.SetOfMethodInfoImpl.EMPTY); @@ -699,7 +706,7 @@ private void seedFieldReference(MethodInfo mi, FieldReference fr, boolean struct private void handleBlock(MethodInfo mi, Block block) { for (Statement statement : block.statements()) { - Set subBlocks = java.util.Collections.newSetFromMap(new java.util.IdentityHashMap<>()); + Set subBlocks = Collections.newSetFromMap(new IdentityHashMap<>()); statement.subBlockStream().forEach(sb -> { subBlocks.add(sb); handleBlock(mi, sb); @@ -745,7 +752,7 @@ private void handleBlock(MethodInfo mi, Block block) { // it onto our argument. That is the same "teleport" the E6 out-of-order guard above exists // to prevent. Caught in 3s by the MODREACH variant of // TestIgnoreModificationsOnFunctionalParameter, which is why that fast twin exists. - io.codelaser.maddi.cst.api.type.ParameterizedType receiverType = + ParameterizedType receiverType = mc.object() == null ? null : mc.object().parameterizedType(); if (!disclaimed) { handleCallSite(mi, vd, mc.methodInfo(), mc.analysis(), mc.parameterExpressions(), receiverType, @@ -800,7 +807,7 @@ private void seedBoundaryCallee(MethodInfo mi, MethodInfo callee, boolean receiv // getOrDefault FALSE): an abstract in-order callee whose verdict never decides — a SAM // whose only implementations are lambdas, never order elements — was treated as modifying // at this very call site; the pass must not read that undecidedness as absence of evidence - if (io.codelaser.maddi.modification.prepwork.Util.unionOverImplementations(callee)) { + if (Util.unionOverImplementations(callee)) { if (!callee.isIgnoreModification() && !callee.isFinalizer() && callee.analysis().getOrNull(PropertyImpl.NON_MODIFYING_METHOD, ValueImpl.BoolImpl.class) == null) { seedWithOrigin(callee, mi, "undecided abstract callee"); @@ -823,7 +830,7 @@ private void seedBoundaryCallee(MethodInfo mi, MethodInfo callee, boolean receiv } /** @see io.codelaser.maddi.modification.link.impl.MethodModification the engine-side twin of this rule */ - private boolean receiverDisclaimed(io.codelaser.maddi.cst.api.expression.Expression receiver) { + private boolean receiverDisclaimed(Expression receiver) { return receiver instanceof VariableExpression ve && Util.variableAndScopes(ve.variable()).anyMatch(Variable::isIgnoreModifications); } @@ -884,8 +891,8 @@ private boolean constructionPhaseWrite(MethodInfo mi, FieldInfo fi) { } private void handleCallSite(MethodInfo mi, VariableData vd, MethodInfo callee, PropertyValueMap analysis, - List argumentExpressions, - io.codelaser.maddi.cst.api.type.ParameterizedType receiverType, + List argumentExpressions, + ParameterizedType receiverType, Variable receiver) { if (callee == null || callee.parameters().isEmpty()) return; // engine mirror (MethodModification.functionalReceiver): the SAM of one of our own functional parameters @@ -901,7 +908,7 @@ private void handleCallSite(MethodInfo mi, VariableData vd, MethodInfo callee, P // frontier: they must not receive an optimistic TRUE at cutover (§10.1). if (callee.methodBody() != null && !callee.methodBody().isEmpty() && !callee.isAbstract()) { missingArgLinkAnalyzedCallees.merge(callee.fullyQualifiedName(), 1, Integer::sum); - for (io.codelaser.maddi.cst.api.expression.Expression arg : argumentExpressions) { + for (Expression arg : argumentExpressions) { projectReceiverChain(mi, vd, arg, null).forEach(node -> taint(node, "call to " + callee + " in " + mi + " without argument links")); } @@ -919,7 +926,7 @@ private void handleCallSite(MethodInfo mi, VariableData vd, MethodInfo callee, P } } } else if (cpi.index() < argumentExpressions.size()) { - io.codelaser.maddi.cst.api.expression.Expression arg = argumentExpressions.get(cpi.index()); + Expression arg = argumentExpressions.get(cpi.index()); if (arg instanceof VariableExpression ve && Util.isHiddenContentField(ve.variable())) continue; for (Object node : projectReceiverChain(mi, vd, arg, null)) { addEdge(cpi, node); @@ -1006,7 +1013,7 @@ private void handleCallSite(MethodInfo mi, VariableData vd, MethodInfo callee, P // TestOptimisticModificationShapes.o1c). // ... and by the OUTER callee, the method invoked on the chain's result (null: an argument), which decides which // of the inner callee's return-value links carry the modification (followsReturnLink) - private final Map>>> + private final Map>>> receiverChainCache = new HashMap<>(); // A chain can lead back to itself: a view local projects onto the view's argument (projectViewLocal), and that @@ -1014,13 +1021,13 @@ private void handleCallSite(MethodInfo mi, VariableData vd, MethodInfo callee, P // is marked in progress (its depth) before it is computed; a re-entry returns nothing, the outer computation // collecting the rest. A result that read an entry still in progress below it is incomplete and is not cached: // only the outermost entry of such a cycle, which has seen all of it, is. - private final Map>> + private final Map>> receiverChainInProgress = new HashMap<>(); private int receiverChainDepth; private int receiverChainLowestReentry = Integer.MAX_VALUE; private Set projectReceiverChain(MethodInfo mi, VariableData vd, - io.codelaser.maddi.cst.api.expression.Expression receiver, + Expression receiver, MethodInfo outer) { if (receiver == null) return Set.of(); Map> cache = receiverChainCache.computeIfAbsent(mi, _ -> new IdentityHashMap<>()) @@ -1055,7 +1062,7 @@ private Set projectReceiverChain(MethodInfo mi, VariableData vd, } private Set computeReceiverChain(MethodInfo mi, VariableData vd, - io.codelaser.maddi.cst.api.expression.Expression receiver, + Expression receiver, MethodInfo outer) { switch (receiver) { case null -> { @@ -1121,7 +1128,7 @@ private Set computeReceiverChain(MethodInfo mi, VariableData vd, for (Link link : mlv.ofReturnValue()) { if (link.linkNature() != LinkNatureImpl.IS_ELEMENT_OF || !resultFqn.equals(link.from().fullyQualifiedName())) continue; - io.codelaser.maddi.cst.api.expression.Expression container = switch (Util.firstRealVariable(link.to())) { + Expression container = switch (Util.firstRealVariable(link.to())) { case This thisVar when callee.typeInfo().isEqualToOrInnerClassOf(thisVar.typeInfo()) -> mc.object(); case ParameterInfo pi when pi.methodInfo() == callee @@ -1274,7 +1281,7 @@ private static Object unwrap(Object node) { return node instanceof DeepOnly(Object inner) ? inner : node; } - private static final boolean NO_VIEW_LOCAL = io.codelaser.maddi.modification.link.impl.Gate.isSet("NOVIEWLOCAL"); + private static final boolean NO_VIEW_LOCAL = Gate.isSet("NOVIEWLOCAL"); /* A local initialised with a call whose result is a VIEW of an argument: the callee's summary says @@ -1304,7 +1311,7 @@ private Set projectViewLocal(MethodInfo mi, VariableData vd, LocalVariab } private Set projectModificationIdenticals(MethodInfo mi, VariableData vd, - io.codelaser.maddi.cst.api.expression.Expression receiver, + Expression receiver, MethodInfo callee) { if (!(receiver instanceof VariableExpression ve) || callee == null) return Set.of(); VariableInfoContainer vic = vd.variableInfoContainerOrNull(ve.variable().fullyQualifiedName()); @@ -1471,12 +1478,12 @@ public String summary() { * annotations — the contracts changed nothing at all. */ public WriteCounts writeVerdicts(List analysisOrder, Report report, - java.util.function.Predicate contracted) { + Predicate contracted) { AnalysisHelper analysisHelper = new AnalysisHelper(); int[] counts = new int[8]; // indexed by the write-result constants Set changed = new LinkedHashSet<>(); boolean[] weakened = {false}; - java.util.function.BiConsumer track = (element, result) -> { + BiConsumer track = (element, result) -> { if (result == DOWNGRADED || result == DECIDED_FALSE) weakened[0] = true; if (result == DOWNGRADED || result == DECIDED_FALSE || result == DECIDED_TRUE || result == REVERSE_UPGRADED) { @@ -1535,7 +1542,7 @@ public WriteCounts writeVerdicts(List analysisOrder, Report report, round: a later MODREACH round can reach it along another chain. An element left unmodified keeps a stale one from an earlier round, if any, which the consumers ignore (they show a why only beside its annotation). */ - private void writeCulprit(Info info, io.codelaser.maddi.cst.api.analysis.Property property, Report report) { + private void writeCulprit(Info info, Property property, Report report) { if (!recordSites || !report.reached().contains(info)) return; Value.Bool value = info.analysis().getOrNull(property, ValueImpl.BoolImpl.class); if (value == null || !value.isFalse()) return; @@ -1617,7 +1624,7 @@ private static Value.Culprit.Step sitelessEdge(Object from) { // a library callee whose verdict is the defaults analyzer's assumption, not an annotation's statement private static boolean assumed(Object node) { - io.codelaser.maddi.cst.api.analysis.Property property = switch (node) { + Property property = switch (node) { case MethodInfo _ -> PropertyImpl.NON_MODIFYING_METHOD; case ParameterInfo _ -> PropertyImpl.UNMODIFIED_PARAMETER; default -> null; @@ -1650,7 +1657,7 @@ private static String reason(String why) { private static final int NO_CHANGE = 0, DOWNGRADED = 1, DECIDED_FALSE = 2, DECIDED_TRUE = 3, LEFT_UNDECIDED = 4, REVERSE_KEPT = 5, REVERSE_UPGRADED = 6, CONTRACT_KEPT = 7; - private int write(PropertyValueMap analysis, io.codelaser.maddi.cst.api.analysis.Property property, + private int write(PropertyValueMap analysis, Property property, boolean reached, boolean tainted, boolean immutableType, Object element, boolean contracted) { Value.Bool current = analysis.getOrNull(property, ValueImpl.BoolImpl.class); @@ -1738,7 +1745,7 @@ private boolean immutableVariable(Variable v) { of the engine's level rule (ReceiverLevel): a call cannot modify a container whose own fields cannot change, whatever it holds. */ - private boolean immutableForModification(io.codelaser.maddi.cst.api.type.ParameterizedType pt) { + private boolean immutableForModification(ParameterizedType pt) { return analysisHelper.typeImmutable(pt).isImmutable() || ReceiverLevel.enabled() && ReceiverLevel.immutableBaseType(pt); } diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestCloneBench.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestCloneBench.java index a64c38812..92d83c66a 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestCloneBench.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestCloneBench.java @@ -151,7 +151,7 @@ public void test() throws Exception { // prep-analyzer/analyzer but shares the one runtime; the clone-bench snippets are independent, and the shared // JDK/library analysis is pre-loaded (LoadAnalysisResults), so there are no cross-type writes to race on. int parallelism = Integer.getInteger("clonebench.parallelism", - Math.max(1, Math.min(java.lang.Runtime.getRuntime().availableProcessors(), 4))); + Math.max(1, Math.min(Runtime.getRuntime().availableProcessors(), 4))); LOGGER.warn("Analyzing with parallelism {}", parallelism); AtomicInteger counter = new AtomicInteger(); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestGiantSwitchRepro.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestGiantSwitchRepro.java index 997c92b3e..c3c78a4de 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestGiantSwitchRepro.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestGiantSwitchRepro.java @@ -4,6 +4,7 @@ import java.nio.file.Path; import java.util.List; +import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.Test; import io.codelaser.maddi.cst.api.info.Info; @@ -25,7 +26,7 @@ public class TestGiantSwitchRepro extends CommonTest { public void test() throws Exception { Path file = CloneBenchCorpus.sourceDirectory("switch_fors_compiles") .resolve("Function18752956_file2311713.java"); - org.junit.jupiter.api.Assumptions.assumeTrue(Files.exists(file), + Assumptions.assumeTrue(Files.exists(file), "requires the clone-bench corpus at " + CloneBenchCorpus.ROOT.toAbsolutePath().normalize() + "; override with -Dtestarchive.root=... or TESTARCHIVE_ROOT"); String source = Files.readString(file); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestHCTNotYetLoaded.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestHCTNotYetLoaded.java index 7d7b0bfa5..59f099f63 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestHCTNotYetLoaded.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/clonebench/TestHCTNotYetLoaded.java @@ -22,6 +22,7 @@ import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -50,7 +51,7 @@ private static BigInteger multModM(long r, long s, BigInteger modul) { """; @DisplayName("test HCT not yet loaded") - @org.junit.jupiter.api.Test + @Test public void test1() { TypeInfo B = javaInspector.parse("Function17122361_file1119884", INPUT1); List ao = prepWork(B); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualClusterAssumptions.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualClusterAssumptions.java index e9efe68db..b2c82b8c0 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualClusterAssumptions.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventualClusterAssumptions.java @@ -19,6 +19,7 @@ import static org.junit.jupiter.api.Assertions.*; +import java.util.ArrayDeque; import java.util.Set; import org.intellij.lang.annotations.Language; @@ -94,7 +95,7 @@ public void testDoomedExternalCandidateIsRefused() { // discharge at the contraction is an unconditional verdict of at least immutable-hc. ArrayDeque // stands in for the java.util.Set shape: eventual "intent" (faked here), no hc verdict -- every // lean on it is doomed mass, so the optimism must be refused and no edge recorded. - TypeInfo deque = javaInspector.compiledTypesManager().type(java.util.ArrayDeque.class); + TypeInfo deque = javaInspector.compiledTypesManager().type(ArrayDeque.class); assertTrue(deque.compilationUnit().externalLibrary(), "harness sanity: ArrayDeque is external"); deque.findUniqueMethod("addFirst", 1).analysis() .set(PropertyImpl.EVENTUAL_METHOD, ValueImpl.EventualImpl.mark("elements")); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventuallyUnmodifiedParameter.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventuallyUnmodifiedParameter.java index a377bc5a0..12deaf191 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventuallyUnmodifiedParameter.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/eventual/TestEventuallyUnmodifiedParameter.java @@ -32,6 +32,7 @@ import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.EventualCluster; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * {@code EVENTUALLY_UNMODIFIED_PARAMETER} (spec: {@code docs/design/spec-eventually-unmodified-parameter.md}), the @@ -88,8 +89,8 @@ public void testStaticHelper() { // the plain fixpoint freezes the helper parameters optimistically unmodified=TRUE (the known // TolerantWrite optimism the shadow pass exists to correct), and eup only fires on an honest // FALSE -- so run composed, exactly like the dogfood DoD environment - var iterating = new io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl(javaInspector, - new io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl.ConfigurationBuilder() + var iterating = new IteratingAnalyzerImpl(javaInspector, + new IteratingAnalyzerImpl.ConfigurationBuilder() .setMaxIterations(10) .setModificationViaReachability(true) .build()); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerFinalField.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerFinalField.java index 74832a40a..7666e871b 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerFinalField.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/field/TestFieldAnalyzerFinalField.java @@ -13,6 +13,9 @@ import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import io.codelaser.maddi.modification.analyzer.impl.SingleIterationAnalyzerImpl; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; import io.codelaser.maddi.modification.prepwork.variable.Links; import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; @@ -360,8 +363,8 @@ public void testReturnInABranchThenReturn() { // jenkins' ProcessTree.SolarisProcess/AIXProcess getArguments(): a first version of the fix of // testBranchThenAStatement emptied the summary ('[] --> -'), so the field read as @Independent. Object // creations must be tracked, as in a corpus run: the fresh 'oc:' source is what the fix put back - var tracking = new io.codelaser.maddi.modification.analyzer.impl.SingleIterationAnalyzerImpl(javaInspector, - new io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl.ConfigurationBuilder() + var tracking = new SingleIterationAnalyzerImpl(javaInspector, + new IteratingAnalyzerImpl.ConfigurationBuilder() .setModificationViaReachability(true).build()); StringBuilder report = new StringBuilder(); boolean ok = true; @@ -374,8 +377,8 @@ public void testReturnInABranchThenReturn() { MethodInfo get = type.methods().stream().filter(m -> m.name().equals("getArguments")).findFirst() .orElseThrow(); String mlv = String.valueOf(get.analysis().getOrNull( - io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS, - io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.class)); + MethodLinkedVariablesImpl.METHOD_LINKS, + MethodLinkedVariablesImpl.class)); Value.Independent independent = type.getFieldByName("arguments", true).analysis() .getOrNull(PropertyImpl.INDEPENDENT_FIELD, ValueImpl.IndependentImpl.class); report.append(fixture[0]).append(": ").append(mlv).append(" / ").append(independent).append('\n'); @@ -419,8 +422,8 @@ public void testDetachedThenModified() { // guava's LinkedHashMultimap.MultimapIterationChain.firstEntry: on the path through the first then-block, // 'first' holds the object 'succ.pred = pred' modifies; linked apart and joined, 'first' left succ's group // (it is succ's object in one alternative only) and the later modification no longer reached it - var tracking = new io.codelaser.maddi.modification.analyzer.impl.SingleIterationAnalyzerImpl(javaInspector, - new io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl.ConfigurationBuilder() + var tracking = new SingleIterationAnalyzerImpl(javaInspector, + new IteratingAnalyzerImpl.ConfigurationBuilder() .setModificationViaReachability(true).build()); TypeInfo type = javaInspector.parse("a.b.Chain", DETACHED_THEN_MODIFIED); List ao = prepWork(type); @@ -429,8 +432,8 @@ public void testDetachedThenModified() { tracking.go(ao); MethodInfo succeeds = type.findUniqueMethod("succeeds", 2); String mlv = String.valueOf(succeeds.analysis().getOrNull( - io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS, - io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.class)); + MethodLinkedVariablesImpl.METHOD_LINKS, + MethodLinkedVariablesImpl.class)); Value.Bool unmodified = type.getFieldByName("first", true).analysis() .getOrNull(PropertyImpl.UNMODIFIED_FIELD, ValueImpl.BoolImpl.class); assertTrue(mlv.contains("this.first*") && unmodified != null && unmodified.isFalse(), @@ -470,8 +473,8 @@ public void testFaceAfterJoin() { // timefold's ToMapPerKeyCounter.add: linked apart and joined, 'h' left the group of the new object (it is // that object in one alternative only); the join edge 'h ← rep' did not carry the faces ('h.value ← 0:v'), // and once carried, 'return h' grouped them under the return's rep, which the extraction did not read - var tracking = new io.codelaser.maddi.modification.analyzer.impl.SingleIterationAnalyzerImpl(javaInspector, - new io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl.ConfigurationBuilder() + var tracking = new SingleIterationAnalyzerImpl(javaInspector, + new IteratingAnalyzerImpl.ConfigurationBuilder() .setModificationViaReachability(true).build()); TypeInfo type = javaInspector.parse("a.b.Counter", FACE_AFTER_JOIN); List ao = prepWork(type); @@ -480,8 +483,8 @@ public void testFaceAfterJoin() { tracking.go(ao); MethodInfo add = type.findUniqueMethod("add", 1); String mlv = String.valueOf(add.analysis().getOrNull( - io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS, - io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.class)); + MethodLinkedVariablesImpl.METHOD_LINKS, + MethodLinkedVariablesImpl.class)); assertTrue(mlv.contains("add.value←0:v"), "add: " + mlv); } @@ -517,8 +520,8 @@ public void testReassignedParameterFaces() { // activemq's BrokerService.addInterceptors: 'broker = new X(broker)' in several ifs. Copying the faces of the // group 'broker' left at the join onto 'broker' itself made the summary claim fields of the caller's object // ('0:broker.b.b ← oc'); the member's name after the join also stands for the caller's object - var tracking = new io.codelaser.maddi.modification.analyzer.impl.SingleIterationAnalyzerImpl(javaInspector, - new io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl.ConfigurationBuilder() + var tracking = new SingleIterationAnalyzerImpl(javaInspector, + new IteratingAnalyzerImpl.ConfigurationBuilder() .setModificationViaReachability(true).build()); TypeInfo type = javaInspector.parse("a.b.Interceptors", REASSIGNED_PARAMETER); List ao = prepWork(type); @@ -527,8 +530,8 @@ public void testReassignedParameterFaces() { tracking.go(ao); MethodInfo add = type.findUniqueMethod("add", 1); String mlv = String.valueOf(add.analysis().getOrNull( - io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS, - io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.class)); + MethodLinkedVariablesImpl.METHOD_LINKS, + MethodLinkedVariablesImpl.class)); assertTrue(!mlv.contains("0:broker.b.b") && !mlv.contains("add.b.b"), "add: " + mlv); } } diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestCheckpointResume.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestCheckpointResume.java index 58a96af8f..94d0ce515 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestCheckpointResume.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestCheckpointResume.java @@ -22,6 +22,7 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.Collection; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -31,10 +32,12 @@ import org.junit.jupiter.api.Test; import io.codelaser.maddi.analysis.api.AnalysisValueFeed; +import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.CheckpointWriter; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; @@ -75,7 +78,7 @@ public void test() throws IOException { List phases = new ArrayList<>(); AnalysisValueFeed feed = new AnalysisValueFeed() { @Override - public void passCompleted(int iteration, boolean fullPass, java.util.Collection analyzed) { + public void passCompleted(int iteration, boolean fullPass, Collection analyzed) { writer.passCompleted(iteration, fullPass, analyzed); } @@ -153,7 +156,7 @@ private Map verdicts(TypeInfo typeInfo) { Map map = new LinkedHashMap<>(); typeInfo.recursiveSubTypeStream().forEach(ti -> { var imm = ti.analysis().getOrNull(PropertyImpl.IMMUTABLE_TYPE, - io.codelaser.maddi.cst.api.analysis.Value.Immutable.class); + Value.Immutable.class); map.put(ti.fullyQualifiedName(), "immutable=" + imm); ti.constructorAndMethodStream().forEach(mi -> map.put(mi.fullyQualifiedName(), "nonModifying=" + nonModifying(mi))); @@ -163,7 +166,7 @@ private Map verdicts(TypeInfo typeInfo) { private String nonModifying(MethodInfo mi) { var v = mi.analysis().getOrNull(PropertyImpl.NON_MODIFYING_METHOD, - io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.class); + ValueImpl.BoolImpl.class); return v == null ? "null" : String.valueOf(v.isTrue()); } } diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestExtensibleHiddenContent.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestExtensibleHiddenContent.java index c18946cd2..609f9db94 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestExtensibleHiddenContent.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/integration/TestExtensibleHiddenContent.java @@ -21,6 +21,7 @@ import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_TYPE; import static org.junit.jupiter.api.Assertions.assertEquals; +import java.io.IOException; import java.util.List; import org.intellij.lang.annotations.Language; @@ -105,7 +106,7 @@ static final class UsesMixed { @DisplayName("#81: substitution of type arguments only when the hidden content is the type parameters'") @Test - public void test() throws java.io.IOException { + public void test() throws IOException { AnalyzerBundle bundle = buildAnalyzerBundle(); TypeInfo X = bundle.javaInspector().parse("a.b.X", INPUT); List ao = bundle.prepAnalyzer().doPrimaryType(X); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/io/TestWriteAnalysisUnnamedPackage.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/io/TestWriteAnalysisUnnamedPackage.java index d4b8c5a10..0a24e2dd8 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/io/TestWriteAnalysisUnnamedPackage.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/io/TestWriteAnalysisUnnamedPackage.java @@ -25,6 +25,7 @@ import java.io.File; import java.io.IOException; import java.util.List; +import java.util.Objects; import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; @@ -89,7 +90,7 @@ public void test1() throws IOException { File written = new File(dest, "_unnamed_package.json"); assertTrue(written.canRead(), () -> "expected " + written + ", found " - + List.of(java.util.Objects.requireNonNull(dest.list()))); + + List.of(Objects.requireNonNull(dest.list()))); // and it round-trips: the restored analysis equals what was written javaInspector.invalidateAllSources(); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/CommonKotlinAnalyzerTest.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/CommonKotlinAnalyzerTest.java index d0ae4b330..b8f9ae6f2 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/CommonKotlinAnalyzerTest.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/kotlin/CommonKotlinAnalyzerTest.java @@ -2,6 +2,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; +import java.io.File; import java.io.IOException; import java.io.UncheckedIOException; import java.nio.file.Files; @@ -157,7 +158,7 @@ protected static Analyzed analyze(String kotlin, String java) { private static SourceSet kotlinStdlib() { String cp = System.getProperty("java.class.path", ""); - Path jar = Stream.of(cp.split(java.io.File.pathSeparator)).map(Path::of) + Path jar = Stream.of(cp.split(File.pathSeparator)).map(Path::of) .filter(p -> p.getFileName().toString().matches("kotlin-stdlib-\\d[^-]*\\.jar")) .findFirst() .orElseThrow(() -> new AssertionError("no kotlin-stdlib jar on the test class path: " + cp)); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/method/TestDelegatingUnion.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/method/TestDelegatingUnion.java index 3542ad64e..74323a128 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/method/TestDelegatingUnion.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/method/TestDelegatingUnion.java @@ -22,6 +22,7 @@ import java.util.List; import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -125,7 +126,7 @@ Fails at HEAD febe5d66d as well (found 2026-09-26): Wrap returns its own field's while the union is correctly @Dependent -- the implementation is decided before the union and cannot come down. An optimistic (unsound) independence, pre-existing; kept as the reproducer. */ - @org.junit.jupiter.api.Disabled("pre-existing: a delegating implementation decided @Independent before its @Dependent union") + @Disabled("pre-existing: a delegating implementation decided @Independent before its @Dependent union") @DisplayName("veto: one implementation exposing its own mutable field keeps the union and the delegator dependent") @Test public void veto() { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestBridgeLinkDrop.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestBridgeLinkDrop.java index eb5d03239..5b654d959 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestBridgeLinkDrop.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestBridgeLinkDrop.java @@ -20,6 +20,7 @@ import java.util.List; import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -33,6 +34,7 @@ import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** * Task #43 (immutability-transform-divergence.md): in-repo reproduction of the loop-transform @@ -135,7 +137,7 @@ public void test() { // hop 1b: statement-level links inside ctorBody — do the links exist locally and die at // summary time, or never form? ctorBody.methodBody().statements().forEach(stmt -> { - var vd = io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl.of(stmt); + var vd = VariableDataImpl.of(stmt); if (vd == null) return; vd.variableInfoStream().forEach(vi -> { var links = vi.linkedVariables(); @@ -149,7 +151,7 @@ public void test() { // hop 1c: who feeds the private ctorBody:0:ld? Statement-level links in run and the ctor for (MethodInfo mi : new MethodInfo[]{pointMT.findUniqueMethod("run", 1), pointMT.constructors().getFirst()}) { mi.methodBody().statements().forEach(stmt -> { - var vd = io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl.of(stmt); + var vd = VariableDataImpl.of(stmt); if (vd == null) return; vd.variableInfoStream().forEach(vi -> { var links = vi.linkedVariables(); @@ -205,6 +207,6 @@ public void test() { } private static void assertEquals(Object expected, Object actual, String message) { - org.junit.jupiter.api.Assertions.assertEquals(expected, actual, message); + Assertions.assertEquals(expected, actual, message); } } diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestDeepCaptureChain.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestDeepCaptureChain.java index 2d1ce791f..6bf99f8b5 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestDeepCaptureChain.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestDeepCaptureChain.java @@ -12,6 +12,7 @@ import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * PLAN-modification-reachability phase 0: the deep capture chain. An object captured in a field, @@ -45,8 +46,8 @@ public void test() { // downgrading the frozen optimistic TRUEs the iterating fixpoint certified. TypeInfo X = javaInspector.parse("a.b.X", INPUT); List ao = prepWork(X); - var iterating = new io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl(javaInspector, - new io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl.ConfigurationBuilder() + var iterating = new IteratingAnalyzerImpl(javaInspector, + new IteratingAnalyzerImpl.ConfigurationBuilder() .setMaxIterations(10) .setModificationViaReachability(true) // implies trackObjectCreations .build()); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestHiddenContentToModifiedArgument.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestHiddenContentToModifiedArgument.java index 886485f78..0f6ea6fbe 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestHiddenContentToModifiedArgument.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestHiddenContentToModifiedArgument.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.util.List; +import java.util.Set; import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; @@ -216,7 +217,7 @@ private void run(boolean modReach) throws IOException { assertFalse(modified(x, "make"), "no teleport: make only builds a pair"); assertFalse(applyTo.parameters().getFirst().isModified(), "handed whole to the method's own function (#69)"); - assertEquals(java.util.Set.of("1:0"), applyTo.parameters().getFirst().analysis().getOrDefault( + assertEquals(Set.of("1:0"), applyTo.parameters().getFirst().analysis().getOrDefault( PropertyImpl.MODIFIED_THROUGH_PASSED_FUNCTION, ValueImpl.SetOfStringsImpl.EMPTY_SET).set(), "... the entry is the channel to the caller"); assertTrue(modified(x, "caller2"), "Append modifies caller2's sb"); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestJacksonCommonsIo.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestJacksonCommonsIo.java index 5d962b78f..f585ccb25 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestJacksonCommonsIo.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestJacksonCommonsIo.java @@ -4,14 +4,20 @@ import java.util.List; +import org.apache.commons.io.IOUtils; import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.Test; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.ObjectMapper; + import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.inspection.resource.SourceSetImpl; import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * The commons-io and Jackson 2 hints (libs/commonsio, libs/jackson). A mapper that reads or writes is not modified; @@ -21,10 +27,10 @@ public class TestJacksonCommonsIo extends CommonTest { @Override protected List extraClassPathParts() { - return List.of(SourceSetImpl.sourceSetOf(org.apache.commons.io.IOUtils.class), - SourceSetImpl.sourceSetOf(com.fasterxml.jackson.databind.ObjectMapper.class), - SourceSetImpl.sourceSetOf(com.fasterxml.jackson.core.JsonParser.class), - SourceSetImpl.sourceSetOf(com.fasterxml.jackson.annotation.JsonInclude.class)); + return List.of(SourceSetImpl.sourceSetOf(IOUtils.class), + SourceSetImpl.sourceSetOf(ObjectMapper.class), + SourceSetImpl.sourceSetOf(JsonParser.class), + SourceSetImpl.sourceSetOf(JsonInclude.class)); } @Language("java") @@ -53,8 +59,8 @@ class X { public void test() { TypeInfo X = javaInspector.parse("a.b.X", INPUT); List ao = prepWork(X); - var iterating = new io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl(javaInspector, - new io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl.ConfigurationBuilder() + var iterating = new IteratingAnalyzerImpl(javaInspector, + new IteratingAnalyzerImpl.ConfigurationBuilder() .setMaxIterations(10) .setModificationViaReachability(true) .build()); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestLoggerModification.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestLoggerModification.java index 2ab6aef30..c82dbcea7 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestLoggerModification.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestLoggerModification.java @@ -19,6 +19,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; +import java.util.Comparator; import java.util.List; import org.intellij.lang.annotations.Language; @@ -123,7 +124,7 @@ public void test() { .filter(m -> List.of("info", "log", "isLoggable", "isInfoEnabled", "setLevel").contains(m.name()) && m.parameters().size() <= 2 && m.parameters().stream().allMatch(p -> !p.parameterizedType().isFunctionalInterface())) - .sorted(java.util.Comparator.comparing(MethodInfo::fullyQualifiedName)) + .sorted(Comparator.comparing(MethodInfo::fullyQualifiedName)) .forEach(m -> hints.append(" ").append(m.name()).append('/').append(m.parameters().size()) .append(" nonModifying=").append(m.isNonModifying()) .append(" ignore=").append(m.isIgnoreModification()).append('\n')); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestLoopTransformDivergence.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestLoopTransformDivergence.java index 125785a53..c00f91a74 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestLoopTransformDivergence.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestLoopTransformDivergence.java @@ -20,6 +20,7 @@ import java.util.List; import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -80,11 +81,11 @@ public void test() { // construction-confined, never-exposed int[] — a defensive VALUE copy links coords ~/∈ to // the ctor parameter, but the transported content (int) is immutable: no aliasing, no // dependence. Both the transformed and untransformed sides now agree on @ImmutableHC. - org.junit.jupiter.api.Assertions.assertTrue(coords.isUnmodified()); - org.junit.jupiter.api.Assertions.assertEquals("@Independent", + Assertions.assertTrue(coords.isUnmodified()); + Assertions.assertEquals("@Independent", String.valueOf(coords.analysis().getOrNull(PropertyImpl.INDEPENDENT_FIELD, ValueImpl.IndependentImpl.class))); - org.junit.jupiter.api.Assertions.assertEquals("@Immutable(hc=true)", + Assertions.assertEquals("@Immutable(hc=true)", String.valueOf(point.analysis().getOrNull(PropertyImpl.IMMUTABLE_TYPE, ValueImpl.ImmutableImpl.class))); } @@ -125,13 +126,13 @@ public void testMutableElements() { System.out.println("DIVERGENCE-M independentField=" + indep); System.out.println("DIVERGENCE-M immutable=" + pointM.analysis().getOrNull(PropertyImpl.IMMUTABLE_TYPE, ValueImpl.ImmutableImpl.class)); - org.junit.jupiter.api.Assertions.assertNotNull(indep); - org.junit.jupiter.api.Assertions.assertFalse(indep.isIndependent(), + Assertions.assertNotNull(indep); + Assertions.assertFalse(indep.isIndependent(), "shared mutable elements: the field depends on the ctor parameter"); Value.Immutable imm = pointM.analysis().getOrNull(PropertyImpl.IMMUTABLE_TYPE, ValueImpl.ImmutableImpl.class); - org.junit.jupiter.api.Assertions.assertNotNull(imm); - org.junit.jupiter.api.Assertions.assertFalse(imm.isAtLeastImmutableHC(), + Assertions.assertNotNull(imm); + Assertions.assertFalse(imm.isAtLeastImmutableHC(), "must not be promoted: the hidden content is reachable through the caller's array"); } } diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestMockitoVerify.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestMockitoVerify.java index f399bcb49..ab050bfe0 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestMockitoVerify.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestMockitoVerify.java @@ -6,12 +6,14 @@ import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.Test; +import org.mockito.Mockito; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.inspection.resource.SourceSetImpl; import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * What Mockito's verification calls do to the mock, as the analysis reads them (libs/mockito). Verifying an @@ -24,7 +26,7 @@ public class TestMockitoVerify extends CommonTest { @Override protected List extraClassPathParts() { - return List.of(SourceSetImpl.sourceSetOf(org.mockito.Mockito.class)); + return List.of(SourceSetImpl.sourceSetOf(Mockito.class)); } @Language("java") @@ -45,8 +47,8 @@ class X { public void test() { TypeInfo X = javaInspector.parse("a.b.X", INPUT); List ao = prepWork(X); - var iterating = new io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl(javaInspector, - new io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl.ConfigurationBuilder() + var iterating = new IteratingAnalyzerImpl(javaInspector, + new IteratingAnalyzerImpl.ConfigurationBuilder() .setMaxIterations(10) .setModificationViaReachability(true) .build()); @@ -83,8 +85,8 @@ class Y { public void testStubbing() { TypeInfo Y = javaInspector.parse("a.b.Y", STUBBING); List ao = prepWork(Y); - var iterating = new io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl(javaInspector, - new io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl.ConfigurationBuilder() + var iterating = new IteratingAnalyzerImpl(javaInspector, + new IteratingAnalyzerImpl.ConfigurationBuilder() .setMaxIterations(10) .setModificationViaReachability(true) .build()); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestObjectReturnDefault.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestObjectReturnDefault.java index 7a7156eb4..15dd1d849 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestObjectReturnDefault.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestObjectReturnDefault.java @@ -20,6 +20,7 @@ import static io.codelaser.maddi.modification.common.CommonTest.javaInspectorWithExtras; import static org.junit.jupiter.api.Assertions.*; +import java.io.IOException; import java.util.List; import java.util.Map; @@ -106,7 +107,7 @@ public void withHints() { */ @DisplayName("without any hints: still no refused downgrade") @Test - public void withoutHints() throws java.io.IOException { + public void withoutHints() throws IOException { JavaInspector ji = javaInspectorWithExtras(testProtocolSourceSet(), List.of(), List.of()); ji.setParameterNames(true); ji.onlyPreload(); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestOptimisticModificationShapes.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestOptimisticModificationShapes.java index 12c385fcc..93e4927cd 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestOptimisticModificationShapes.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestOptimisticModificationShapes.java @@ -21,6 +21,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; @@ -29,7 +31,10 @@ import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.impl.GuardAnalyzerImpl; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** @@ -128,7 +133,7 @@ public void o2d() { MethodInfo close = method(X.findSubType("Closeable2"), "close"); assertTrue(close.isNonModifying(), "the default's own body decides its verdict"); assertTrue(iterating.messages().stream().anyMatch(m -> m.message().contains("O2d.Counter.close") - && io.codelaser.maddi.modification.analyzer.impl.GuardAnalyzerImpl.OVERRIDE_WEAKENS_COMPUTED + && GuardAnalyzerImpl.OVERRIDE_WEAKENS_COMPUTED .equals(m.category())), "the override that modifies is reported: " + iterating.messages()); } @@ -212,8 +217,8 @@ class O1c { public void o1c() { TypeInfo X = javaInspector.parse("a.b.O1c", O1_JDK); analyze(X); - String verdicts = java.util.stream.Stream.of("add", "addAll", "addAllRef", "addAllThis", "addAllField") - .map(m -> m + "=" + method(X, m).isModifying()).collect(java.util.stream.Collectors.joining(" ")); + String verdicts = Stream.of("add", "addAll", "addAllRef", "addAllThis", "addAllField") + .map(m -> m + "=" + method(X, m).isModifying()).collect(Collectors.joining(" ")); System.out.println("### O1c " + verdicts); assertTrue(method(X, "addAllField").isModifying(), "lambda modifying a field: " + verdicts); assertTrue(method(X, "addAllThis").isModifying(), "lambda calling this.add: " + verdicts); @@ -349,8 +354,8 @@ public void o4ec() { assertTrue(method(coll, "removeIf").isModifying(), "removeIf, " + where); assertTrue(method(coll, "sum").isNonModifying(), "sum only calls next(), " + where); assertEquals("@Independent(except={\"remove\"})", method(coll, "intIterator").analysis() - .getOrNull(io.codelaser.maddi.cst.impl.analysis.PropertyImpl.INDEPENDENT_METHOD, - io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.class).toString(), where); + .getOrNull(PropertyImpl.INDEPENDENT_METHOD, + ValueImpl.IndependentImpl.class).toString(), where); } } diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRecursionThroughAbstract.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRecursionThroughAbstract.java index 46cc62dd1..cb37a2006 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRecursionThroughAbstract.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestRecursionThroughAbstract.java @@ -27,6 +27,7 @@ import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * The pessimistic-bootstrap shape behind the dogfood's reverse-divergence class (PLAN-modification- @@ -94,8 +95,8 @@ public void test() { public void testModReach() { TypeInfo X = javaInspector.parse("X", INPUT); var ao = prepWork(X); - var iterating = new io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl(javaInspector, - new io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl.ConfigurationBuilder() + var iterating = new IteratingAnalyzerImpl(javaInspector, + new IteratingAnalyzerImpl.ConfigurationBuilder() .setMaxIterations(10) .setModificationViaReachability(true) // implies trackObjectCreations .build()); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSetterArgumentNotModified.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSetterArgumentNotModified.java index 9962ff1f9..753f0fac6 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSetterArgumentNotModified.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestSetterArgumentNotModified.java @@ -15,6 +15,7 @@ import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.VariableInfo; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; @@ -67,7 +68,7 @@ private static String state(MethodInfo m) { VariableInfo vi = vd.variableInfo(command); return m.name() + ": command modified=" + command.isModified() + " vd=" + vi.isModified() + " links=" + vi.linkedVariables() + " mlv=" + m.analysis().getOrNull(METHOD_LINKS, - io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.class); + MethodLinkedVariablesImpl.class); } @DisplayName("a setter's argument, and the object it was read from, are not modified") diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestStaticSideEffects.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestStaticSideEffects.java index d7ccec3d3..80ce8659f 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestStaticSideEffects.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestStaticSideEffects.java @@ -35,6 +35,7 @@ import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.CommonTest; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import io.codelaser.maddi.modification.common.util.Culprits; /** * {@code @StaticSideEffects}: a method modifies static/global state of another type (road-to-immutability §050). @@ -315,8 +316,8 @@ private static String culprit(MethodInfo mi) { @DisplayName("culprits: the first responsible statement, followed into the callee to the assignment") @Test public void testCulprit() throws IOException { - boolean before = io.codelaser.maddi.modification.common.util.Culprits.ENABLED; - io.codelaser.maddi.modification.common.util.Culprits.ENABLED = true; + boolean before = Culprits.ENABLED; + Culprits.ENABLED = true; try { TypeInfo X = javaInspector.parse("a.b.Big", CULPRIT); List ao = prepWork(X); @@ -329,15 +330,15 @@ public void testCulprit() throws IOException { assertFalse(sse(register), "its own static state"); assertNull(culprit(register), "no static side effect, no culprit"); } finally { - io.codelaser.maddi.modification.common.util.Culprits.ENABLED = before; + Culprits.ENABLED = before; } } @DisplayName("culprits: a call of a contracted @StaticSideEffects method ends the chain") @Test public void testCulpritContract() throws IOException { - boolean before = io.codelaser.maddi.modification.common.util.Culprits.ENABLED; - io.codelaser.maddi.modification.common.util.Culprits.ENABLED = true; + boolean before = Culprits.ENABLED; + Culprits.ENABLED = true; try { TypeInfo X = javaInspector.parse("a.b.X", PROPAGATION); List ao = prepWork(X); @@ -346,7 +347,7 @@ public void testCulpritContract() throws IOException { assertEquals("6 calls direct(..) <- 5 calls reconfigure(..), contracted @StaticSideEffects", culprit(X.findUniqueMethod("indirect", 0))); } finally { - io.codelaser.maddi.modification.common.util.Culprits.ENABLED = before; + Culprits.ENABLED = before; } } @@ -369,8 +370,8 @@ class Registry2 { @DisplayName("culprits: a recursive call is no culprit; the walk goes on to the statement that is") @Test public void testCulpritRecursive() throws IOException { - boolean before = io.codelaser.maddi.modification.common.util.Culprits.ENABLED; - io.codelaser.maddi.modification.common.util.Culprits.ENABLED = true; + boolean before = Culprits.ENABLED; + Culprits.ENABLED = true; try { TypeInfo rec = javaInspector.parse("a.b.Rec", RECURSIVE); List ao = prepWork(rec); @@ -378,7 +379,7 @@ public void testCulpritRecursive() throws IOException { assertEquals("6 assigns Registry2.count", culprit(rec.findUniqueMethod("process", 1))); } finally { - io.codelaser.maddi.modification.common.util.Culprits.ENABLED = before; + Culprits.ENABLED = before; } } diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestViewMethods.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestViewMethods.java index 8ad0f6755..c82c470a6 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestViewMethods.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestViewMethods.java @@ -10,6 +10,7 @@ import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * Library "view" methods: {@code Collections.synchronizedList(list)} returns an object through which {@code list} can @@ -45,8 +46,8 @@ class X { public void test() { TypeInfo X = javaInspector.parse("a.b.X", INPUT); List ao = prepWork(X); - var iterating = new io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl(javaInspector, - new io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl.ConfigurationBuilder() + var iterating = new IteratingAnalyzerImpl(javaInspector, + new IteratingAnalyzerImpl.ConfigurationBuilder() .setMaxIterations(10) .setModificationViaReachability(true) .build()); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestVisitPredicateDisclaimer.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestVisitPredicateDisclaimer.java index 2e34faca2..db5887346 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestVisitPredicateDisclaimer.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/modification/TestVisitPredicateDisclaimer.java @@ -27,6 +27,7 @@ import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * The {@code Element.visit(Predicate)} shape of the dogfood (Quest E, 2026-08-03): a visitor method @@ -84,8 +85,8 @@ static boolean run(Element e) { public void testModReach() { TypeInfo X = javaInspector.parse("X", INPUT); var ao = prepWork(X); - var iterating = new io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl(javaInspector, - new io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl.ConfigurationBuilder() + var iterating = new IteratingAnalyzerImpl(javaInspector, + new IteratingAnalyzerImpl.ConfigurationBuilder() .setMaxIterations(10) .setModificationViaReachability(true) // implies trackObjectCreations .build()); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestDefaultMethodModification.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestDefaultMethodModification.java index 7fd5123f8..87a4e0731 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestDefaultMethodModification.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestDefaultMethodModification.java @@ -22,12 +22,14 @@ import java.util.List; import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.analyzer.CommonTest; +import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; /** * Modification of an implementation's field that reaches the field only through an inherited interface default @@ -91,8 +93,8 @@ private void inheritedDefaultIterating(boolean modReach) { String name = modReach ? "XR" : "XI"; TypeInfo X = javaInspector.parse("a.b." + name, INHERITED_DEFAULT.replace("class X", "class " + name)); List ao = prepWork(X); - new io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl(javaInspector, - new io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl.ConfigurationBuilder() + new IteratingAnalyzerImpl(javaInspector, + new IteratingAnalyzerImpl.ConfigurationBuilder() .setMaxIterations(10).setModificationViaReachability(modReach).build()).analyze(ao); assertTrue(X.findSubType("Impl").getFieldByName("list", true).isModified(), "Impl.list is modifiable via the inherited add(), modReach=" + modReach); @@ -109,7 +111,7 @@ public void inheritedDefaultMethodIterating() { cutover on (every corpus run), modification of Impl.list through the inherited default add() -> items().add(s) is lost -- the fixpoint has it, reachability does not. Another optimistic shape in the O1/O4 family. */ - @org.junit.jupiter.api.Disabled("MODREACH loses modification through an inherited default method via an accessor") + @Disabled("MODREACH loses modification through an inherited default method via an accessor") @DisplayName("as inheritedDefaultMethod, under the iterating analyzer with the MODREACH cutover") @Test public void inheritedDefaultMethodIteratingModReach() { diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestIteration.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestIteration.java index 09b3da0c1..ceff28199 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestIteration.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nolink/TestIteration.java @@ -20,6 +20,7 @@ import static org.junit.jupiter.api.Assertions.*; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import org.intellij.lang.annotations.Language; @@ -116,7 +117,7 @@ private List convergenceSequence(String input, int cap) throws IOExcept TypeInfo X = bundle.javaInspector().parse("a.b.X", input); List ao = bundle.prepAnalyzer().doPrimaryType(X); SingleIterationAnalyzer single = (SingleIterationAnalyzer) bundle.analyzer(); - List seq = new java.util.ArrayList<>(); + List seq = new ArrayList<>(); for (int pass = 1; pass <= cap; pass++) { single.go(ao, false, pass == 1); int changed = single.propertiesChanged(); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityFixtures.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityFixtures.java index d016f02fe..b629e0324 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityFixtures.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/NullabilityFixtures.java @@ -1,11 +1,14 @@ package io.codelaser.maddi.modification.analyzer.nullability; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import org.intellij.lang.annotations.Language; +import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -112,7 +115,7 @@ void caught() { // every local verdict, sorted: 'method.name: Type', a counter per method and name so sibling locals both show static String locals(Report report) { - Map seen = new java.util.HashMap<>(); + Map seen = new HashMap<>(); return report.locals().entrySet().stream() .map(e -> { String key = e.getKey().methodInfo().name() + "." + e.getKey().name(); @@ -128,11 +131,11 @@ static Map byName(Report report) { .collect(Collectors.toMap(e -> e.getKey().fullyQualifiedName(), e -> k(e.getValue()))); } - List calls(String method, String callee) { + List calls(String method, String callee) { MethodInfo mi = parsed.methods().stream().filter(m -> m.name().equals(method)).findFirst().orElseThrow(); - List out = new java.util.ArrayList<>(); + List out = new ArrayList<>(); mi.methodBody().visit(e -> { - if (e instanceof io.codelaser.maddi.cst.api.expression.MethodCall mc && mc.methodInfo() != null + if (e instanceof MethodCall mc && mc.methodInfo() != null && mc.methodInfo().name().equals(callee)) out.add(mc); return true; }); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestCallResults.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestCallResults.java index 0247842c9..5d7802aac 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestCallResults.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestCallResults.java @@ -5,6 +5,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Map; +import java.util.TreeMap; import java.util.stream.Collectors; import org.intellij.lang.annotations.Language; @@ -76,7 +77,7 @@ static T extract(String text, ThrowingFunction parser) { static Integer none() { return parse(null); } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("ThrowingFunction", s.get("a.b.LP.extract(String,a.b.LP.ThrowingFunction):1:parser"), s.toString()); @@ -106,7 +107,7 @@ static String next(String current) { } } """, Policy.KOTLIN); - Map l = new java.util.TreeMap<>(); + Map l = new TreeMap<>(); report.locals().forEach((local, pt) -> l.put(local.name(), k(pt))); assertEquals("List>", l.get("chain"), l + "\n" + explain(report)); } @@ -147,9 +148,9 @@ public T get() { } } """, Policy.KOTLIN); - Map l = new java.util.TreeMap<>(); + Map l = new TreeMap<>(); report.locals().forEach((local, pt) -> l.put(local.name(), k(pt))); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("List, String?>>", l.get("functions"), l + "\n" + explain(report)); assertEquals("Chain", l.get("chain"), l + "\n" + explain(report)); @@ -192,9 +193,9 @@ static void use(SF sf) { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); - Map l = new java.util.TreeMap<>(); + Map l = new TreeMap<>(); report.locals().forEach((local, pt) -> l.put(local.name(), k(pt))); assertEquals("Set", l.get("nonNullAdditions"), l + "\n" + explain(report)); assertEquals("Set", s.get("a.b.SF.names()"), s + "\n" + explain(report)); @@ -225,7 +226,7 @@ Listener listener() { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("Supplier", s.get("a.b.MR.Listener.(java.util.function.Supplier):0:supplier"), s + "\n" + explain(report)); @@ -248,7 +249,7 @@ String find(Class t) { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("ConcurrentHashMap, String?>", s.get("a.b.CA.cache"), s + "\n" + explain(report)); } @@ -274,7 +275,7 @@ String issueOld(String salt) { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("String?", s.get("a.b.LG.issueOld(String)"), s + "\n" + explain(report)); } @@ -305,7 +306,7 @@ Map deprecated() { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("Map", s.get("a.b.CC.deprecated()"), s + "\n" + explain(report)); } @@ -413,7 +414,7 @@ static Iterator removeNull(final Iterator itr) { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("Iterator", s.get("a.b.RM.removeNull(java.util.Iterator):0:itr"), s + "\n" + explain(report)); assertEquals("Iterator", s.get("a.b.RM.removeNull(java.util.Iterator)"), s + "\n" + explain(report)); @@ -441,7 +442,7 @@ Object resolveInternal(String key) { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); String all = s + "\n" + explain(report); assertFalse(s.get("a.b.KA.resolveInternal(String)").endsWith("?"), all); @@ -488,7 +489,7 @@ static Base make(CharSequence s) { static Base nothing() { return make(null); } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); String l = locals(report); assertTrue(l.contains("drain.queuedTask: Runnable?"), l); @@ -792,7 +793,7 @@ int retries() { @Test public void returnThroughParameterPerCall() { Report report = run("a.b.G9", GAP9); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(label(info), k(pt))); assertEquals("Integer?", s.get("getInteger(1:defaultValue)"), s.toString()); String r = s.entrySet().stream().filter(e -> e.getKey().equals("getInteger()")).map(Map.Entry::getValue) @@ -808,7 +809,7 @@ public void returnThroughParameterPerCall() { @Test public void returnThroughParameterPerCallKotlin() { Report report = run("a.b.G9", GAP9, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(label(info), k(pt))); assertEquals("Integer", s.get("timeoutValue()"), s.toString()); assertEquals("Integer?", s.get("retriesValue()"), s.toString()); @@ -833,7 +834,7 @@ static LF of(String s) { List items() { return items; } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("String?", s.get("a.b.LF.of(String):0:s"), s.toString()); assertEquals("List", s.get("a.b.LF.(java.util.List):0:items"), s.toString()); @@ -854,7 +855,7 @@ class OE { Optional name() { return Optional.ofNullable(name); } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("String?", s.get("a.b.OE.name"), s.toString()); assertEquals("Optional", s.get("a.b.OE.name()"), s.toString()); @@ -879,7 +880,7 @@ class LR { static Object none(int i) throws Exception { return call(() -> null); } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("Integer?", s.get("a.b.LR.(Integer):0:max"), s.toString()); assertEquals("Function", s.get("a.b.LR.(java.util.function.Function):0:provider"), diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestContracts.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestContracts.java index 597c49a9c..c97ce41a0 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestContracts.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestContracts.java @@ -6,13 +6,19 @@ import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; import java.util.stream.Collectors; +import java.util.stream.Stream; import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.TypeParameter; import io.codelaser.maddi.cst.api.type.NullableState; import io.codelaser.maddi.cst.api.type.ParameterizedType; @@ -159,14 +165,14 @@ static final class Length extends Converter { static String use(Upper u) { return u.convert("x", true); } } """; - Map kotlin = new java.util.TreeMap<>(); + Map kotlin = new TreeMap<>(); run("a.b.CV", src, Policy.KOTLIN).verdicts() .forEach((info, pt) -> kotlin.put(info.fullyQualifiedName(), k(pt))); assertEquals("A?", kotlin.get("a.b.CV.Converter.doForward(Object):0:a"), kotlin.toString()); assertEquals("String?", kotlin.get("a.b.CV.Upper.doForward(String):0:s"), kotlin.toString()); assertEquals("String?", kotlin.get("a.b.CV.Length.doForward(String):0:s"), kotlin.toString()); - Map flow = new java.util.TreeMap<>(); + Map flow = new TreeMap<>(); run("a.b.CV2", src.replace("CV", "CV2"), Policy.NULL_MARKED_FLOW_ONLY).verdicts() .forEach((info, pt) -> flow.put(info.fullyQualifiedName(), k(pt))); assertEquals("String", flow.get("a.b.CV2.Length.doForward(String):0:s"), flow.toString()); @@ -182,7 +188,7 @@ static final class Length extends Converter { @DisplayName("Kotlin: an override's return is no wider than the overridden member's") @Test public void overrideOfTypeVariableReturn() { - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); run("a.b.OR", """ package a.b; import java.util.AbstractMap; @@ -229,7 +235,7 @@ static final class Lookup extends AbstractMap { @DisplayName("Kotlin: an override's type-argument slots equal the overridden member's") @Test public void overrideTypeArgumentSlots() { - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); run("a.b.SL", """ package a.b; import java.util.AbstractSet; @@ -314,7 +320,7 @@ nullable argument (guava, worktree-maddi-all 2026-10-16: 'Range', 'EnumSet s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); run("a.b.BS", """ package a.b; class BS { @@ -347,7 +353,7 @@ make the two incompatible (guava, worktree-maddi-all 2026-10-16: Converter's com @DisplayName("Kotlin: a type-argument slot holding a type variable is not made nullable") @Test public void typeVariableSlot() { - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); run("a.b.TV", """ package a.b; class TV { @@ -382,7 +388,7 @@ static final class StrongHelper implements Helper { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("Strong?", s.get("a.b.EB.StrongHelper.copy(a.b.EB.Strong)"), s.toString()); assertEquals("E?", s.get("a.b.EB.Helper.copy(a.b.EB.Entry)"), s.toString()); @@ -403,7 +409,7 @@ class EA { static Object[] pass(@Nullable String[] p) { return p; } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); String all = s + "\n" + explain(report); assertFalse(s.get("a.b.EA.entries").endsWith("]?"), all); @@ -437,14 +443,14 @@ static class Free { } static void use(Box b) { b.put("a", null); } } """, Policy.KOTLIN); - Map tps = new java.util.TreeMap<>(); + Map tps = new TreeMap<>(); parsed.subTypes().forEach(st -> st.typeParameters().forEach(tp -> tps.put(st.simpleName() + "." + tp.simpleName(), tp))); assertTrue(report.nonNullTypeParameter(tps.get("Box.K")), tps.toString()); assertTrue(report.nonNullTypeParameter(tps.get("Box.V"))); assertFalse(report.nonNullTypeParameter(tps.get("Lenient.T"))); assertTrue(report.nonNullTypeParameter(tps.get("Sub.E")), "carried over through the supertype"); assertFalse(report.nonNullTypeParameter(tps.get("Free.F"))); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertFalse(s.get("a.b.NM.use(a.b.NM.Box):0:b").contains("?"), s + "\n" + explain(report)); } @@ -495,9 +501,9 @@ static java.util.function.Function, Object> wrapper() { } } """, Policy.KOTLIN); - Map tps = new java.util.TreeMap<>(); + Map tps = new TreeMap<>(); parsed.subTypes().forEach(st -> st.typeParameters().forEach(tp -> tps.put(st.simpleName() + "." + tp.simpleName(), tp))); - java.util.stream.Stream.concat(java.util.stream.Stream.of(parsed), parsed.subTypes().stream()) + Stream.concat(Stream.of(parsed), parsed.subTypes().stream()) .forEach(st -> st.methods().forEach(m -> m.typeParameters() .forEach(tp -> tps.put(m.name() + "." + tp.simpleName(), tp)))); assertTrue(report.nonNullTypeParameter(tps.get("Response.T")), tps.toString()); @@ -548,7 +554,7 @@ static Object keys(Iterable keys) { static List copy(Iterable it) { return new ArrayList<>(); } } """, Policy.KOTLIN); - Map l = new java.util.TreeMap<>(); + Map l = new TreeMap<>(); report.locals().forEach((local, pt) -> l.put(local.name(), k(pt))); assertTrue(l.get("free").contains("?"), l + "\n" + explain(report)); assertFalse(l.get("list").contains("?"), l + "\n" + explain(report)); @@ -611,9 +617,9 @@ public UniStream ifExists(Class otherClass) { } } """, Policy.KOTLIN); - java.util.Set nonNull = new java.util.TreeSet<>(); + Set nonNull = new TreeSet<>(); for (Info info : report.verdicts().keySet()) { - if (info instanceof io.codelaser.maddi.cst.api.info.MethodInfo mi) { + if (info instanceof MethodInfo mi) { for (var tp : mi.typeParameters()) { if (report.nonNullTypeParameter(tp)) nonNull.add(mi.fullyQualifiedName() + " " + tp.simpleName()); } @@ -658,7 +664,7 @@ public String generateDisplayNameForClass(Class testClass) { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("String", s.get("a.b.NR.generateDisplayNameForClass(Class)"), s + "\n" + explain(report)); } @@ -682,7 +688,7 @@ static Task create(Runnable runnable, @ParametricNullness V result) { static Task submit(Runnable r) { return Task.create(r, null); } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); String all = s + "\n" + explain(report); assertFalse(s.get("a.b.PP.Task.create(Runnable,Object):1:result").endsWith("?"), all); @@ -722,7 +728,7 @@ Set cached() { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); String all = s + "\n" + explain(report); assertFalse(s.get("a.b.LC.keySet()").endsWith("?"), all); @@ -771,7 +777,7 @@ static final class Natural extends Ord> { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); String all = s + "\n" + explain(report); assertFalse(s.get("a.b.NO.Natural.nullsFirst()").endsWith("?"), all); @@ -802,7 +808,7 @@ abstract static class View extends AbstractMap { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("V?", s.get("a.b.JD.Fwd.replace(Object,Object)"), s.toString()); assertEquals("V?", s.get("a.b.JD.View.get(Object)"), s.toString()); @@ -833,7 +839,7 @@ static String call(Function f, Cut c) { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("F!", s.get("a.b.TO.Function.apply(Object):0:input"), s.toString()); assertEquals("Cut", s.get("a.b.TO.Cut.compareTo(a.b.TO.Cut):0:that"), s.toString()); @@ -877,7 +883,7 @@ Map getOrCreate(R rowKey) { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("Map", s.get("a.b.PN.Table.create()"), s + "\n" + explain(report)); assertEquals("T?", s.get("a.b.PN.Supplier.get()"), "the declaration keeps it; the printer prints T"); @@ -932,7 +938,7 @@ final class Row extends ArrayMap { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("V!", s.get("a.b.NI.Cell.getValue()"), s + "\n" + explain(report)); assertEquals("V?", s.get("a.b.NI.Table.$0.getValue()"), s.toString()); @@ -970,7 +976,7 @@ Map separate() { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("Map", s.get("a.b.LZ.chained()"), s + "\n" + explain(report)); assertEquals("Map", s.get("a.b.LZ.separate()"), s + "\n" + explain(report)); @@ -1135,7 +1141,7 @@ static class Plain { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("Res", s.get("a.b.BO.Exec.execute(int)"), s.toString()); assertEquals("Res?", s.get("a.b.BO.Plain.find(int)"), s.toString()); @@ -1160,7 +1166,7 @@ static List two(int i) { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("String?", s.get("a.b.IF.find(int)"), s.toString()); assertEquals("List", s.get("a.b.IF.one(int)"), s.toString()); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestMethodWalker.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestMethodWalker.java index 1981faf30..20afdef5d 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestMethodWalker.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestMethodWalker.java @@ -4,14 +4,20 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; +import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.TreeMap; import java.util.stream.Collectors; import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import io.codelaser.maddi.cst.api.expression.Assignment; +import io.codelaser.maddi.cst.api.expression.ConstructorCall; +import io.codelaser.maddi.cst.api.expression.Expression; import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.expression.VariableExpression; import io.codelaser.maddi.cst.api.info.FieldInfo; @@ -19,9 +25,14 @@ import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.statement.Block; +import io.codelaser.maddi.cst.api.statement.ExpressionAsStatement; import io.codelaser.maddi.cst.api.statement.IfElseStatement; +import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.api.statement.TryStatement; +import io.codelaser.maddi.cst.api.statement.WhileStatement; +import io.codelaser.maddi.cst.api.variable.DependentVariable; +import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.Variable; /** @@ -48,9 +59,9 @@ public void locals() { .findFirst().orElseThrow().getValue())); // the lookup the printer uses: by declaring element MethodInfo sibling = parsed.findUniqueMethod("sibling", 1); - io.codelaser.maddi.cst.api.statement.Statement ifElse = sibling.methodBody().statements().getFirst(); - var first = (io.codelaser.maddi.cst.api.statement.LocalVariableCreation) ifElse.block().statements().getFirst(); - var second = (io.codelaser.maddi.cst.api.statement.LocalVariableCreation) ifElse.otherBlocksStream() + Statement ifElse = sibling.methodBody().statements().getFirst(); + var first = (LocalVariableCreation) ifElse.block().statements().getFirst(); + var second = (LocalVariableCreation) ifElse.otherBlocksStream() .findFirst().orElseThrow().statements().getFirst(); assertEquals("String?", k(report.local(sibling, first, first.localVariable()))); assertEquals("String", k(report.local(sibling, second, second.localVariable()))); @@ -100,9 +111,9 @@ public void nestedLocals() { Report report = run("a.b.N", NESTED_LOCALS); String all = locals(report); System.out.println(all); - org.junit.jupiter.api.Assertions.assertTrue(all.contains("flatten.shortEntry: Node?"), all); - org.junit.jupiter.api.Assertions.assertTrue(all.contains("flatten.longEntry: Node?"), all); - org.junit.jupiter.api.Assertions.assertTrue(all.contains("flatten.entry: StackEntry?"), all); + Assertions.assertTrue(all.contains("flatten.shortEntry: Node?"), all); + Assertions.assertTrue(all.contains("flatten.longEntry: Node?"), all); + Assertions.assertTrue(all.contains("flatten.entry: StackEntry?"), all); } @Language("java") @@ -161,7 +172,7 @@ public void useSites() { assertEquals("String?", byLabel.get("lazy"), "Java's default value"); assertEquals("String", byLabel.get("getLazy()"), "the lazy getter: null only in the branch that assigns"); String locals = locals(report); - org.junit.jupiter.api.Assertions.assertTrue(locals.contains("lookup.v: String?"), locals); + Assertions.assertTrue(locals.contains("lookup.v: String?"), locals); } @Language("java") @@ -178,12 +189,12 @@ class K { @Test public void smartCasts() { Report report = run("a.b.K", SMART_CASTS); - io.codelaser.maddi.cst.api.info.MethodInfo checked = parsed.findUniqueMethod("checked", 1); - io.codelaser.maddi.cst.api.statement.Statement ret = checked.methodBody().statements().getLast(); + MethodInfo checked = parsed.findUniqueMethod("checked", 1); + Statement ret = checked.methodBody().statements().getLast(); assertEquals(true, report.useSites().nonNullAt(ret, checked.parameters().getFirst())); assertEquals(true, report.smartCasts().nonNullAt(ret, checked.parameters().getFirst())); - io.codelaser.maddi.cst.api.info.MethodInfo required = parsed.findUniqueMethod("required", 1); - io.codelaser.maddi.cst.api.statement.Statement ret2 = required.methodBody().statements().getLast(); + MethodInfo required = parsed.findUniqueMethod("required", 1); + Statement ret2 = required.methodBody().statements().getLast(); ParameterInfo r = required.parameters().getFirst(); // the JDK hint: requireNonNull's parameter demands non-null, so Java knows; Kotlin does not smart-cast assertEquals(true, report.useSites().nonNullAt(ret2, r)); @@ -243,23 +254,23 @@ public String make(Runnable r) { MethodInfo build = parsed.findUniqueMethod("build", 1); MethodInfo[] make = {null}; build.methodBody().visit(e -> { - if (e instanceof io.codelaser.maddi.cst.api.expression.ConstructorCall cc && cc.anonymousClass() != null) { + if (e instanceof ConstructorCall cc && cc.anonymousClass() != null) { make[0] = cc.anonymousClass().findUniqueMethod("make", 1); } return true; }); - io.codelaser.maddi.cst.api.statement.Statement ifStatement = make[0].methodBody().statements().get(1); - io.codelaser.maddi.cst.api.statement.Statement assignment = ifStatement.block().statements().getFirst(); - io.codelaser.maddi.cst.api.variable.Variable[] count = {null}; - List calls = new java.util.ArrayList<>(); + Statement ifStatement = make[0].methodBody().statements().get(1); + Statement assignment = ifStatement.block().statements().getFirst(); + Variable[] count = {null}; + List calls = new ArrayList<>(); assignment.expression().visit(e -> { if (e instanceof VariableExpression ve && "count".equals(ve.variable().simpleName())) count[0] = ve.variable(); - if (e instanceof io.codelaser.maddi.cst.api.expression.MethodCall mc) calls.add(mc); + if (e instanceof MethodCall mc) calls.add(mc); return true; }); StringBuilder sb = new StringBuilder("statement=" + report.smartCasts().nonNullAt(assignment, count[0])); for (var call : calls) sb.append("; ").append(call).append("=").append(report.smartCasts().nonNullAt(call, count[0])); - Map l = new java.util.TreeMap<>(); + Map l = new TreeMap<>(); report.locals().forEach((local, pt) -> l.put(local.methodInfo().name() + "." + local.name(), k(pt))); assertEquals("AtomicLong?", l.get("build.count"), l + " " + sb); assertEquals(false, report.smartCasts().nonNullAt(assignment, count[0]), sb.toString()); @@ -294,9 +305,9 @@ void run() { } """, Policy.KOTLIN); MethodInfo run = parsed.findUniqueMethod("run", 0); - io.codelaser.maddi.cst.api.statement.Statement loop = run.methodBody().statements().getFirst(); - io.codelaser.maddi.cst.api.statement.Statement call = loop.block().statements().getLast(); - io.codelaser.maddi.cst.api.variable.Variable[] next = {null}; + Statement loop = run.methodBody().statements().getFirst(); + Statement call = loop.block().statements().getLast(); + Variable[] next = {null}; call.expression().visit(e -> { if (e instanceof VariableExpression ve && "next".equals(ve.variable().simpleName())) next[0] = ve.variable(); return true; @@ -326,7 +337,7 @@ static class Ref extends Base { parsed.subTypes().forEach(st -> { if ("Ref".equals(st.simpleName())) ctor[0] = st.findConstructor(2); }); - io.codelaser.maddi.cst.api.statement.Statement cleanUp = ctor[0].methodBody().statements().get(1); + Statement cleanUp = ctor[0].methodBody().statements().get(1); ParameterInfo queue = ctor[0].parameters().get(1); assertEquals(false, report.smartCasts().nonNullAt(cleanUp, queue)); assertEquals(true, report.useSites().nonNullAt(cleanUp, queue)); @@ -343,11 +354,11 @@ public void propertySmartCasts() { private boolean smartCastAtReturn(Report report, String method, int n, String field) { MethodInfo mi = parsed.findUniqueMethod(method, n); - io.codelaser.maddi.cst.api.statement.Statement ret = mi.methodBody().statements().getLast(); - io.codelaser.maddi.cst.api.variable.Variable[] found = {null}; + Statement ret = mi.methodBody().statements().getLast(); + Variable[] found = {null}; ret.expression().visit(e -> { if (found[0] == null && e instanceof VariableExpression ve - && ve.variable() instanceof io.codelaser.maddi.cst.api.variable.FieldReference fr + && ve.variable() instanceof FieldReference fr && field.equals(fr.fieldInfo().name())) found[0] = fr; return true; }); @@ -414,10 +425,10 @@ public void annotationPresent() { public void readLoop() { Report report = run("a.b.RL", READ_LOOP); MethodInfo count = parsed.findUniqueMethod("count", 1); - io.codelaser.maddi.cst.api.statement.WhileStatement loop = (io.codelaser.maddi.cst.api.statement.WhileStatement) + WhileStatement loop = (WhileStatement) count.methodBody().statements().get(2); - io.codelaser.maddi.cst.api.statement.Statement body = loop.block().statements().getFirst(); - io.codelaser.maddi.cst.api.variable.Variable line = ((io.codelaser.maddi.cst.api.statement.LocalVariableCreation) + Statement body = loop.block().statements().getFirst(); + Variable line = ((LocalVariableCreation) count.methodBody().statements().get(1)).localVariable(); assertEquals(true, report.useSites().nonNullAt(body, line), "inside the loop"); assertEquals(false, report.smartCasts().nonNullAt(body, line), "not a Kotlin smart cast"); @@ -471,15 +482,15 @@ public void inStatementAndFields() { assertEquals("String?", byLabel.get("cached")); // the printer's view: in 'v != null && accept(v)', the call has v; Kotlin smart-casts it too MethodInfo both = parsed.findUniqueMethod("both", 1); - io.codelaser.maddi.cst.api.statement.Statement ret = both.methodBody().statements().getLast(); - java.util.List calls = new java.util.ArrayList<>(); + Statement ret = both.methodBody().statements().getLast(); + List calls = new ArrayList<>(); ret.expression().visit(e -> { - if (e instanceof io.codelaser.maddi.cst.api.expression.MethodCall mc + if (e instanceof MethodCall mc && "accept".equals(mc.methodInfo().name())) calls.add(mc); return true; }); - io.codelaser.maddi.cst.api.expression.MethodCall accept = calls.getFirst(); - io.codelaser.maddi.cst.api.variable.Variable v = ((io.codelaser.maddi.cst.api.statement.LocalVariableCreation) + MethodCall accept = calls.getFirst(); + Variable v = ((LocalVariableCreation) both.methodBody().statements().getFirst()).localVariable(); assertEquals(true, report.smartCasts().nonNullAt(accept, v)); } @@ -512,19 +523,19 @@ static int arms(int k, String s) { TypeInfo n = parsed; MethodInfo top = n.findUniqueMethod("top", 1); ParameterInfo np = top.parameters().getFirst(); - io.codelaser.maddi.cst.api.statement.Statement loop = top.methodBody().statements().get(1); + Statement loop = top.methodBody().statements().get(1); assertEquals(false, report.useSites().nonNullAt(loop, np), "the loop assigns n: not known at its condition"); MethodInfo cases = n.findUniqueMethod("cases", 2); ParameterInfo s = cases.parameters().get(1); - io.codelaser.maddi.cst.api.statement.Statement sw = cases.methodBody().statements().getFirst(); - io.codelaser.maddi.cst.api.statement.Statement returnInCase2 = sw.subBlockStream().findFirst().orElseThrow() + Statement sw = cases.methodBody().statements().getFirst(); + Statement returnInCase2 = sw.subBlockStream().findFirst().orElseThrow() .statements().get(2); assertEquals(false, report.useSites().nonNullAt(returnInCase2, s), "case 2 is not reached through case 0"); MethodInfo arms = n.findUniqueMethod("arms", 2); ParameterInfo armsS = arms.parameters().get(1); - List calls = new java.util.ArrayList<>(); + List calls = new ArrayList<>(); arms.methodBody().statements().getFirst().expression().visit(e -> { - if (e instanceof io.codelaser.maddi.cst.api.expression.MethodCall mc) calls.add(mc); + if (e instanceof MethodCall mc) calls.add(mc); return true; }); assertEquals("hashCode", calls.get(1).methodInfo().name()); @@ -658,10 +669,10 @@ public String next() { } """, Policy.NULL_MARKED_FLOW_ONLY.withoutContracts().withWorld(World.CLOSED)); System.out.println(explain(report)); - Map present = new java.util.TreeMap<>(); - List methods = new java.util.ArrayList<>(parsed.methods()); + Map present = new TreeMap<>(); + List methods = new ArrayList<>(parsed.methods()); parsed.findUniqueMethod("iterator", 0).methodBody().visit(e -> { - if (e instanceof io.codelaser.maddi.cst.api.expression.ConstructorCall cc && cc.anonymousClass() != null) { + if (e instanceof ConstructorCall cc && cc.anonymousClass() != null) { methods.addAll(cc.anonymousClass().methods()); } return true; @@ -716,7 +727,7 @@ String notDefaulted(Map m, Properties p, String k) { } } """, Policy.NULL_MARKED_FLOW_ONLY.withoutContracts().withWorld(World.CLOSED)); - Map present = new java.util.TreeMap<>(); + Map present = new TreeMap<>(); parsed.methods().forEach(m -> m.methodBody().visit(e -> { if (e instanceof MethodCall mc && mc.methodInfo() != null && "get".equals(mc.methodInfo().name())) { present.merge(m.name(), report.useSites().keyPresentWhenCalled(mc), Boolean::logicalAnd); @@ -736,7 +747,7 @@ String notDefaulted(Map m, Properties p, String k) { @DisplayName("key presence: a call handed the map to an unmodified parameter keeps it, in a try's catch too") @Test public void keyPresenceAcrossUnmodifiedCall() { - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); run("a.b.KU", """ package a.b; import java.util.HashMap; @@ -817,14 +828,14 @@ static int count(Set blocks, List lst) { } """, Policy.KOTLIN); MethodInfo count = parsed.findUniqueMethod("count", 2); - List derefs = new java.util.ArrayList<>(); - List inner = new java.util.ArrayList<>(); + List derefs = new ArrayList<>(); + List inner = new ArrayList<>(); count.methodBody().visit(e -> { if (e instanceof IfElseStatement ifElse) inner.add(ifElse.block().statements().getFirst()); return true; }); Statement use = inner.getFirst(); - io.codelaser.maddi.cst.api.variable.Variable child = report.smartCasts().before(use).stream() + Variable child = report.smartCasts().before(use).stream() .filter(v -> v.simpleName().equals("child")).findFirst().orElse(null); System.out.println("SMART " + report.smartCasts().before(use) + " JAVA " + report.useSites().before(use)); assertEquals(null, child, "contains(Object) accepts null: Kotlin knows nothing about child"); @@ -1065,7 +1076,7 @@ static int ensureNotNegative(Integer i, String name) { static void caller() { plain(null); } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(label(info), k(pt))); assertEquals("Integer?", s.get("ensureNotNegative(0:i)"), s.toString()); assertEquals("Object?[]", s.get("illegalArgument(1:args)"), s.toString()); @@ -1146,10 +1157,10 @@ private boolean timeoutCallNonNull(Report report, String method) { MethodInfo mi = parsed.methods().stream().filter(m -> m.name().equals(method)).findFirst().orElseThrow(); boolean[] found = {false, false}; mi.methodBody().visit(e -> { - if (e instanceof io.codelaser.maddi.cst.api.statement.ExpressionAsStatement eas - && eas.expression() instanceof io.codelaser.maddi.cst.api.expression.MethodCall mc + if (e instanceof ExpressionAsStatement eas + && eas.expression() instanceof MethodCall mc && mc.methodInfo() != null && "timeout".equals(mc.methodInfo().name()) - && mc.object() instanceof io.codelaser.maddi.cst.api.expression.VariableExpression ve) { + && mc.object() instanceof VariableExpression ve) { found[0] = true; found[1] = report.useSites().nonNullAt(eas, ve.variable()); } @@ -1234,11 +1245,11 @@ void interrupted(AssertionFailedError e) { } } """); - List conditional = calls("conditional", "getExpected"); + List conditional = calls("conditional", "getExpected"); assertEquals(2, conditional.size()); assertFalse(report.useSites().pureCallNonNullWhenCalled(conditional.get(0)), "the test itself"); assertTrue(report.useSites().pureCallNonNullWhenCalled(conditional.get(1)), "the else branch"); - List interrupted = calls("interrupted", "getExpected"); + List interrupted = calls("interrupted", "getExpected"); assertEquals(2, interrupted.size()); assertFalse(report.useSites().pureCallNonNullWhenCalled(interrupted.get(1)), "after a modifying call"); } @@ -1415,9 +1426,9 @@ void load(boolean init) { assertFalse(receiverKnownAtReturn(report, parsed.findUniqueMethod("referenced", 0)), "this::referenced"); assertFalse(receiverKnownAtReturn(report, parsed.findUniqueMethod("initialLength", 0)), "the initializer"); assertFalse(receiverKnownAtReturn(report, parsed.findUniqueMethod("anonymous", 0)), "the anonymous class"); - io.codelaser.maddi.cst.api.expression.MethodCall equals = calls("looped", "equals").getFirst(); + MethodCall equals = calls("looped", "equals").getFirst(); assertTrue(report.useSites().nonNullAt(equals, - ((io.codelaser.maddi.cst.api.expression.VariableExpression) equals.object()).variable()), + ((VariableExpression) equals.object()).variable()), "in the catch of the loop, as CredentialWatcher.loadPropertyPathToStream"); assertTrue(report.useSites().nonNullAtExit(parsed.findUniqueMethod("looped", 0), parsed.getFieldByName("path", true)), "the loop assigns it only non-null values"); @@ -1471,7 +1482,7 @@ static class Reader { .withWorld(World.CLOSED).withoutTestNulls()); assertTrue(keyKnownAtRemove(report, "free"), "app != null ? app : \"none\""); assertFalse(keyKnownAtRemove(report, "unguarded"), "b ? app : \"none\""); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(label(info), k(pt))); assertEquals("Res", s.get("conf()"), s.toString()); assertEquals("Res", s.get("(0:res)"), s.toString()); @@ -1515,7 +1526,7 @@ static long interval(Optional metadata, Meta m) { } } """); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(label(info), k(pt))); assertEquals("Object", s.get("guarded(0:val)"), s.toString()); assertEquals("Object", s.get("chained(0:val)"), s.toString()); @@ -1563,14 +1574,14 @@ static boolean unchecked(H h) { private boolean receiverKnownInCondition(Report report, String method) { MethodInfo mi = parsed.methods().stream().filter(m -> m.name().equals(method)).findFirst().orElseThrow(); Statement loop = mi.methodBody().statements().get(1); - List calls = new java.util.ArrayList<>(); + List calls = new ArrayList<>(); loop.expression().visit(e -> { - if (e instanceof io.codelaser.maddi.cst.api.expression.MethodCall mc && mc.object() != null - && mc.object() instanceof io.codelaser.maddi.cst.api.expression.VariableExpression) calls.add(mc); + if (e instanceof MethodCall mc && mc.object() != null + && mc.object() instanceof VariableExpression) calls.add(mc); return true; }); - io.codelaser.maddi.cst.api.expression.MethodCall first = calls.getFirst(); - Variable clazz = ((io.codelaser.maddi.cst.api.expression.VariableExpression) first.object()).variable(); + MethodCall first = calls.getFirst(); + Variable clazz = ((VariableExpression) first.object()).variable(); return report.useSites().nonNullAt(loop, clazz) || report.useSites().nonNullAt(first, clazz); } @@ -1579,14 +1590,14 @@ private boolean keyKnownAtRemove(Report report, String method) { MethodInfo mi = parsed.methods().stream() .filter(m -> m.name().equals(method) && m.parameters().size() >= 1).findFirst().orElseThrow(); Statement st = mi.methodBody().statements().get(1); - List removes = new java.util.ArrayList<>(); + List removes = new ArrayList<>(); st.visit(e -> { - if (e instanceof io.codelaser.maddi.cst.api.expression.MethodCall mc && mc.methodInfo() != null + if (e instanceof MethodCall mc && mc.methodInfo() != null && "remove".equals(mc.methodInfo().name())) removes.add(mc); return true; }); - io.codelaser.maddi.cst.api.expression.MethodCall remove = removes.getFirst(); - Variable key = ((io.codelaser.maddi.cst.api.expression.VariableExpression) remove.parameterExpressions() + MethodCall remove = removes.getFirst(); + Variable key = ((VariableExpression) remove.parameterExpressions() .getFirst()).variable(); return report.useSites().nonNullAt(st, key) || report.useSites().nonNullAt(remove, key); } @@ -1594,18 +1605,18 @@ private boolean keyKnownAtRemove(Report report, String method) { // the facts on x when the method's 'return x.m();' starts private static boolean receiverKnownAtReturn(Report report, MethodInfo method) { Statement rs = method.methodBody().statements().getFirst(); - io.codelaser.maddi.cst.api.expression.MethodCall mc = - (io.codelaser.maddi.cst.api.expression.MethodCall) rs.expression(); - Variable x = ((io.codelaser.maddi.cst.api.expression.VariableExpression) mc.object()).variable(); + MethodCall mc = + (MethodCall) rs.expression(); + Variable x = ((VariableExpression) mc.object()).variable(); return report.useSites().nonNullAt(rs, x); } // the facts on 'buffer' when the method's 'buffer[pos++] = v' starts private static boolean bufferKnownAtWrite(Report report, MethodInfo method) { Statement write = method.methodBody().statements().getLast(); - io.codelaser.maddi.cst.api.expression.Assignment a = - (io.codelaser.maddi.cst.api.expression.Assignment) write.expression(); - Variable buffer = ((io.codelaser.maddi.cst.api.variable.DependentVariable) a.variableTarget()).arrayVariable(); + Assignment a = + (Assignment) write.expression(); + Variable buffer = ((DependentVariable) a.variableTarget()).arrayVariable(); return report.useSites().nonNullAt(write, buffer); } @@ -1653,7 +1664,7 @@ static String body(String s) { TryStatement assigning = (TryStatement) parsed.findUniqueMethod("body", 1).methodBody().statements().get(1) .block().statements().getFirst(); Statement first = assigning.block().statements().getFirst(); - Variable t = ((io.codelaser.maddi.cst.api.expression.Assignment) first.expression()).variableTarget(); + Variable t = ((Assignment) first.expression()).variableTarget(); assertEquals(true, report.useSites().nonNullAt(first, t), "the body's start"); assertEquals(false, report.useSites().nonNullAt(assigning.catchClauses().getFirst().block().statements() .getFirst(), t), "the catch: the body may have assigned t"); @@ -1693,8 +1704,8 @@ public String plain() { } """); Statement read = parsed.findUniqueMethod("take", 0).methodBody().statements().get(1); - io.codelaser.maddi.cst.api.variable.FieldReference value = (io.codelaser.maddi.cst.api.variable.FieldReference) - ((VariableExpression) ((io.codelaser.maddi.cst.api.statement.LocalVariableCreation) read).localVariable() + FieldReference value = (FieldReference) + ((VariableExpression) ((LocalVariableCreation) read).localVariable() .assignmentExpression()).variable(); Variable next = ((VariableExpression) value.scope()).variable(); assertEquals(true, report.useSites().nonNullAt(read, next), "after 'if (!hasNext()) throw'"); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestNullGraph.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestNullGraph.java index f0b6de704..5c3908203 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestNullGraph.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestNullGraph.java @@ -5,6 +5,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Map; +import java.util.TreeMap; import java.util.stream.Collectors; import org.intellij.lang.annotations.Language; @@ -12,6 +13,7 @@ import org.junit.jupiter.api.Test; import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.type.ParameterizedType; /** @@ -489,10 +491,10 @@ class R { assertEquals("String", byName.get("a.b.R.loop(String)")); assertEquals("String", byName.get("a.b.R.constant(String)")); assertEquals("String?", byName.get("a.b.R.conditional(String)")); - Map shadows = new java.util.TreeMap<>(); + Map shadows = new TreeMap<>(); for (MethodInfo mi : report.verdicts().keySet().stream().filter(i -> i instanceof MethodInfo) .map(i -> (MethodInfo) i).toList()) { - for (io.codelaser.maddi.cst.api.info.ParameterInfo pi : mi.parameters()) { + for (ParameterInfo pi : mi.parameters()) { ParameterizedType shadow = report.reassigned(pi); if (shadow != null) shadows.put(mi.name(), k(shadow)); } @@ -516,7 +518,7 @@ class WR { static String none() { return "x"; } } """, Policy.NULL_MARKED); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); for (MethodInfo mi : parsed.methods()) { String reached = k(report.verdicts().get(mi)).endsWith("?") ? "reached" : "-"; s.put(mi.name(), reached + (report.reachedByWrittenNull(mi) ? "/written" : "")); @@ -565,7 +567,7 @@ static String joinList(Object[] parts) { static Runnable nullHashers() { return capture(new Object[]{null}); } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("Object?[]", s.get("a.b.RA.join(Object[]):0:parts"), s.toString()); assertEquals("String[]", s.get("a.b.RA.bounds(String[]):0:upperBounds"), s.toString()); @@ -607,7 +609,7 @@ static final class ListBuilder extends Builder { static Object useBuilder(Builder b) { return b.add("x", null); } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("String[]", s.get("a.b.VC.bounds(String[]):0:bounds"), s + "\n" + explain(report)); assertEquals("String[]", s.get("a.b.VC.caller(String[]):0:upper"), s.toString()); @@ -652,7 +654,7 @@ Object capture(String[] upperBounds) { static String callerBuilt(Object x, Object y) { return Joiner.on(',').join(new Object[]{x, y}); } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("String[]", s.get("a.b.JS.Capturer.capture(String[]):0:upperBounds"), s + "\n" + explain(report)); } @@ -683,7 +685,7 @@ static T ensureNotNull(T object, String name) { static String withDefault() { return getOrDefault(null, "d"); } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("E!", s.get("a.b.MT.Entry.getElement()"), s + "\n" + explain(report)); assertEquals("E!", s.get("a.b.MT.ImmutableEntry.element"), s.toString()); @@ -725,7 +727,7 @@ static final class Set { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); String all = s + "\n" + explain(report); // the result's elements are the argument array's, as Kotlin infers T from it @@ -765,9 +767,9 @@ static final class Holder { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); - Map l = new java.util.TreeMap<>(); + Map l = new TreeMap<>(); report.locals().forEach((local, pt) -> l.put(local.name(), k(pt))); assertEquals("List", l.get("list"), l + "\n" + explain(report)); // a parameter's array: the callers' nulls belong to their instantiations @@ -801,9 +803,9 @@ void extract() { static void use(DB db) { db.setClientVersion(null); } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); - Map l = new java.util.TreeMap<>(); + Map l = new TreeMap<>(); report.locals().forEach((local, pt) -> l.put(local.name(), k(pt))); assertTrue(l.get("map").endsWith("String?>"), l + "\n" + s + "\n" + explain(report)); assertTrue(s.get("a.b.DB.appLabels").endsWith("String?>"), s + "\n" + explain(report)); @@ -830,7 +832,7 @@ void load(ConcurrentMap> snapshot) { static void loader(FR fr) { fr.load(new ConcurrentHashMap<>()); } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); String field = s.get("a.b.FR.map"); String parameter = s.get("a.b.FR.load(java.util.concurrent.ConcurrentMap):0:snapshot"); @@ -859,7 +861,7 @@ void add(String namespace, String key, String value) { static void use(MV mv) { mv.add(null, null, "v"); } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("Set", s.get("a.b.MV.namespaces()"), s + "\n" + explain(report)); assertEquals("Iterator>", s.get("a.b.MV.iterator()"), s + "\n" + explain(report)); @@ -887,7 +889,7 @@ int count() { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("String?[]", s.get("a.b.FC.NAMES"), s + "\n" + explain(report)); assertEquals("String?[]", s.get("a.b.FC.plus"), s + "\n" + explain(report)); @@ -919,7 +921,7 @@ static void use() { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("Long", s.get("a.b.WC.LongFunnel.funnel(Long,StringBuilder):0:value"), s + "\n" + explain(report)); } @@ -968,7 +970,7 @@ static int use(Map ranks) { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); String context = s + "\n" + explain(report); // the null is the receiver's: an Ordering @@ -1003,7 +1005,7 @@ static void use(VA va) { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("List", s.get("a.b.VA.args"), s + "\n" + explain(report)); assertEquals("List", s.get("a.b.VA.main(java.util.List):0:args"), s + "\n" + explain(report)); @@ -1044,7 +1046,7 @@ Map, Prop> getProperties() { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("Map?, Prop>", s.get("a.b.GR.getProperties()"), s + "\n" + explain(report)); } @@ -1110,10 +1112,10 @@ void add2(String s) { } } """, Policy.KOTLIN); - Map p = new java.util.TreeMap<>(); + Map p = new TreeMap<>(); report.parentClasses().forEach((type, pt) -> p.put(type.fullyQualifiedName(), k(pt))); assertEquals("LinkedList", p.get("a.b.SS.OwnerContext"), p + "\n" + explain(report)); - Map l = new java.util.TreeMap<>(); + Map l = new TreeMap<>(); report.locals().forEach((local, pt) -> l.put(local.name(), k(pt))); // a write through a view loop's variable stays there (NOVIEWLOOPWRITES): the map and the superclass keep Space assertFalse(p.containsKey("a.b.SS.Monitor"), p + "\n" + l + "\n" + explain(report)); @@ -1148,11 +1150,11 @@ static Object value(Future future) throws Exception { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); String all = s + "\n" + explain(report); assertFalse(s.get("a.b.PC.PredicateFunction.apply(Object)").endsWith("?"), all); - Map l = new java.util.TreeMap<>(); + Map l = new TreeMap<>(); report.locals().forEach((local, pt) -> l.put(local.name(), k(pt))); assertTrue(l.get("v").endsWith("?"), l + "\n" + all); } @@ -1190,7 +1192,7 @@ static boolean test() { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); String all = s + "\n" + explain(report); assertFalse(s.get("a.b.CV.IntConverter.INSTANCE").contains("String?"), all); @@ -1213,7 +1215,7 @@ static final class Edges implements Predicate { static boolean test(Predicate p) { return p.apply(null); } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("String", s.get("a.b.CS.Edges.apply(String):0:edge"), s.toString()); assertEquals("String", s.get("a.b.CS.Edges.last"), s.toString()); @@ -1239,7 +1241,7 @@ static Map other() { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("Map", s.get("a.b.ES.EMPTY"), s.toString()); assertEquals("Map", s.get("a.b.ES.other()"), s + "\n" + locals(report)); @@ -1262,7 +1264,7 @@ void init(int n) { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); String field = s.get("a.b.SI.table"); assertTrue(field != null && field.contains("?>"), s.toString()); @@ -1290,7 +1292,7 @@ static String[] kept() { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("String?[]", s.get("a.b.NW.cleared()"), s + "\n" + explain(report)); assertEquals("String[]", s.get("a.b.NW.kept()"), s.toString()); @@ -1394,7 +1396,7 @@ private void add(@Nullable Object[] elements, int n) { Entry getEntry(int index) { return entries[index]; } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); String why = s + "\n" + explain(report); assertEquals("ImmutableEntry[]", s.get("a.b.RM.entries"), why); @@ -1446,7 +1448,7 @@ static GL create(int n, Entry e) { Entry entry(int i) { return entries[i]; } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); String why = s + "\n" + explain(report); assertEquals("Entry[]", s.get("a.b.GL.entries"), why); @@ -1475,7 +1477,7 @@ void use() { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("Object?", s.get("a.b.SR.getIfPresent(Object):0:key"), s.toString()); assertTrue(locals(report).contains("use.names: List"), "nothing flows back to the caller: " + locals(report)); @@ -1510,7 +1512,7 @@ static void poison() { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); String l = locals(report); assertTrue(l.contains("nulls.withNull: Map"), l); @@ -1777,7 +1779,7 @@ static class Box { static Box box() { return new Box<>(null); } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(label(info), k(pt))); assertEquals("E?", s.get("embedded"), s.toString()); // X!: no claim about X, which is the point -- not X? @@ -1825,7 +1827,7 @@ static PT make() { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("List?", s.get("a.b.PT.Builder.items"), s.toString()); assertEquals("List", s.get("a.b.PT.items"), s.toString()); @@ -1854,7 +1856,7 @@ static String fill(Mapper mapper) { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("Map", s.get("a.b.TR.extract(a.b.TR.Mapper,String)"), s.toString()); assertEquals("TypeRef>", s.get("a.b.TR.MAP_TYPE"), s.toString()); @@ -1896,7 +1898,7 @@ static Number[] handOut(String[] labels, Function f, Def def) { } } """); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("Number[]", s.get("a.b.EX.D.from(Number[]):0:levels"), s.toString()); assertEquals("Number?[]", s.get("a.b.EX.handOut(String[],java.util.function.Function,a.b.EX.Def)"), diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestPreconditions.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestPreconditions.java index 7c0287ea5..5fa8a09d5 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestPreconditions.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestPreconditions.java @@ -3,15 +3,19 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; import java.util.stream.Collectors; import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -50,9 +54,9 @@ static String ensureNotBlank(String s, String name) { public void rejectsNull() { Report report = run("a.b.RJ", REJECTS, Policy.KOTLIN); Set rejecting = report.rejectsNull().stream().map(pi -> pi.methodInfo().name() + ":" + pi.name()) - .collect(Collectors.toCollection(java.util.TreeSet::new)); + .collect(Collectors.toCollection(TreeSet::new)); assertEquals("[:text, ensureNotBlank:s, helped:s]", rejecting.toString()); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); // a null test in the method itself already makes the parameter nullable (Policy.nullTests); through a helper // it does not: that is the parameter the printer reports, and the opt-in makes nullable @@ -61,7 +65,7 @@ public void rejectsNull() { Report optIn = run("a.b.RJ2", REJECTS.replace("RJ", "RJ2"), Policy.KOTLIN.withRejectionsNullable()); - Map o = new java.util.TreeMap<>(); + Map o = new TreeMap<>(); optIn.verdicts().forEach((info, pt) -> o.put(info.fullyQualifiedName(), k(pt))); assertEquals("String?", o.get("a.b.RJ2.helped(String):0:s"), o.toString()); assertEquals("String", o.get("a.b.RJ2.dereferenced(String):0:s"), o.toString()); @@ -109,12 +113,12 @@ static int viaObjects(String in) { assertEquals(true, report.useSites().nonNullAt(last, viaObjects.parameters().getFirst()), "Objects.isNull, from the table"); MethodInfo other = p.findUniqueMethod("other", 1); - List calls = new java.util.ArrayList<>(); + List calls = new ArrayList<>(); other.methodBody().statements().getFirst().expression().visit(e -> { - if (e instanceof io.codelaser.maddi.cst.api.expression.MethodCall mc) calls.add(mc); + if (e instanceof MethodCall mc) calls.add(mc); return true; }); - io.codelaser.maddi.cst.api.expression.MethodCall trim = calls.stream() + MethodCall trim = calls.stream() .filter(c -> "trim".equals(c.methodInfo().name())).findFirst().orElseThrow(); assertEquals(true, report.useSites().nonNullAt(trim, other.parameters().getFirst()), "isEmpty is true for null"); } @@ -165,7 +169,7 @@ public String find(Class c) { String name = "FD" + (++round[0]); Report report = run("a.b." + name, variant.replace("class FD ", "class " + name + " "), policy); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName().replace(name, "FD"), k(pt))); if (!"String?".equals(s.get("a.b.FD.find(Class)")) || "String?".equals(s.get("a.b.FD.findOrFail(Class)"))) { out.append(variant.contains("var d") ? "var " : "typed ").append(policy.world()).append(' ') @@ -253,14 +257,14 @@ public void preconditionFamilies() { Report report = run("a.b.PF", PRECONDITIONS, Policy.KOTLIN); System.out.println(explain(report)); Set preconditions = report.preconditions().stream().map(pi -> pi.methodInfo().typeInfo().simpleName() - + "." + pi.methodInfo().name() + ":" + pi.name()).collect(Collectors.toCollection(java.util.TreeSet::new)); + + "." + pi.methodInfo().name() + ":" + pi.name()).collect(Collectors.toCollection(TreeSet::new)); assertEquals("[Counter.visit:n, Doc.:text, Doc.from:text, IfSt.replace:newstat, PF.checked:n, PF.ensureNotEmpty:s, PF.named:n, PF.show:n, PF.use:e, " + "PF.use:node, PF.use:parent, PF.use:q, PF.use:s, PF.use:v, Printer.visit:n, St.replace:newstat, " + "Visitor.visit:n]", preconditions.toString(), "Sink: Lenient accepts null; Echo: a method reference implements it; Quiet: a lambda that does not " + "throw; IfSt: through super.replace"); Set nullArguments = report.nullArguments().stream().map(a -> a.parameter().methodInfo().name() + "(" - + a.argument() + (a.literal() ? ", literal" : "") + ")").collect(Collectors.toCollection(java.util.TreeSet::new)); + + a.argument() + (a.literal() ? ", literal" : "") + ")").collect(Collectors.toCollection(TreeSet::new)); assertEquals("[checked(node.next), ensureNotEmpty(node.label), from(node.label), named(null, literal), replace(parent.parent), visit(node.next)]", nullArguments.toString()); @@ -284,7 +288,7 @@ public void preconditionFamilies() { assertEquals(report.nullArguments().size(), declared.nullArguments().size(), "decided before the policy"); // what the printers report (CodeLaser/maddi#125): the declared ones that null reached without the policy Set nonNull = declared.preconditionsNonNull().stream().map(pi -> pi.methodInfo().typeInfo().simpleName() - + "." + pi.methodInfo().name() + ":" + pi.name()).collect(Collectors.toCollection(java.util.TreeSet::new)); + + "." + pi.methodInfo().name() + ":" + pi.name()).collect(Collectors.toCollection(TreeSet::new)); assertEquals("[Counter.visit:n, IfSt.replace:newstat, Printer.visit:n, St.replace:newstat, Visitor.visit:n]", nonNull.toString()); assertTrue(report.preconditionsNonNull().isEmpty(), "the policy is off"); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestReadNarrowing.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestReadNarrowing.java index 55835af6e..ea8e59b2d 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestReadNarrowing.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestReadNarrowing.java @@ -7,11 +7,14 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import io.codelaser.maddi.cst.api.expression.Expression; import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.expression.VariableExpression; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; import io.codelaser.maddi.cst.api.statement.Statement; +import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.cst.api.variable.Variable; /** @@ -249,8 +252,8 @@ static Object make() { TypeInfo group = parsed.subTypes().stream().filter(t -> "Group".equals(t.simpleName())).findFirst().orElseThrow(); MethodInfo buildNode = group.findUniqueMethod("buildNode", 0); Statement read = buildNode.methodBody().statements().getFirst(); - io.codelaser.maddi.cst.api.variable.Variable parent = ((io.codelaser.maddi.cst.api.statement.LocalVariableCreation) read) - .localVariable().assignmentExpression() instanceof io.codelaser.maddi.cst.api.expression.MethodCall mc + Variable parent = ((LocalVariableCreation) read) + .localVariable().assignmentExpression() instanceof MethodCall mc && mc.object() instanceof VariableExpression ve ? ve.variable() : null; assertEquals(true, report.useSites().nonNullAt(read, parent), "Group never stores a null parent"); } @@ -303,8 +306,8 @@ public static class Extensible extends Root { private Boolean parentReadNonNull(Report report, String type) { TypeInfo t = parsed.subTypes().stream().filter(x -> type.equals(x.simpleName())).findFirst().orElseThrow(); Statement read = t.findUniqueMethod("up", 0).methodBody().statements().getFirst(); - var value = ((io.codelaser.maddi.cst.api.statement.LocalVariableCreation) read).localVariable().assignmentExpression(); - var parent = ((io.codelaser.maddi.cst.api.variable.FieldReference) ((VariableExpression) value).variable()) + var value = ((LocalVariableCreation) read).localVariable().assignmentExpression(); + var parent = ((FieldReference) ((VariableExpression) value).variable()) .scopeVariable(); return report.useSites().nonNullAt(read, parent); } @@ -377,7 +380,7 @@ static void make() { private static boolean movesKnown(Report report, MethodInfo method) { Statement read = method.methodBody().statements().getFirst(); - io.codelaser.maddi.cst.api.expression.Expression size = ((io.codelaser.maddi.cst.api.statement.LocalVariableCreation) read).localVariable().assignmentExpression(); + Expression size = ((LocalVariableCreation) read).localVariable().assignmentExpression(); Variable moves = ((VariableExpression) ((MethodCall) size).object()).variable(); return report.useSites().nonNullAt(read, moves); } @@ -385,8 +388,8 @@ private static boolean movesKnown(Report report, MethodInfo method) { // the facts on 'parent' when the method's 'String n = parent.name;' starts private static boolean parentKnown(Report report, MethodInfo method) { Statement read = method.methodBody().statements().getFirst(); - io.codelaser.maddi.cst.api.variable.FieldReference name = (io.codelaser.maddi.cst.api.variable.FieldReference) - ((VariableExpression) ((io.codelaser.maddi.cst.api.statement.LocalVariableCreation) read).localVariable() + FieldReference name = (FieldReference) + ((VariableExpression) ((LocalVariableCreation) read).localVariable() .assignmentExpression()).variable(); return report.useSites().nonNullAt(read, ((VariableExpression) name.scope()).variable()); } diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestSeeds.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestSeeds.java index adb99b21f..20510d843 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestSeeds.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestSeeds.java @@ -6,9 +6,11 @@ import java.util.List; import java.util.Map; +import java.util.TreeMap; import java.util.stream.Collectors; import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -16,6 +18,8 @@ import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.analyzer.impl.SingleIterationAnalyzerImpl; @@ -185,12 +189,12 @@ public void degradedLocals() { new IteratingAnalyzerImpl.ConfigurationBuilder().setNullability(true).build()).go(ao, 3); MethodInfo big = t.findUniqueMethod("big", 1); // what LinkComputerImpl writes when it gives up on a method; its variable data then carries no links - big.analysis().setAllowControlledOverwrite(io.codelaser.maddi.cst.impl.analysis.PropertyImpl.DEGRADED_ANALYSIS_METHOD, - io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE); + big.analysis().setAllowControlledOverwrite(PropertyImpl.DEGRADED_ANALYSIS_METHOD, + ValueImpl.BoolImpl.TRUE); Report report = new NullabilityPass(Policy.NULL_MARKED).go(ao); String all = locals(report); - org.junit.jupiter.api.Assertions.assertTrue(all.contains("big.none: String?"), all); - org.junit.jupiter.api.Assertions.assertTrue(all.contains("big.known: String!"), all); + Assertions.assertTrue(all.contains("big.none: String?"), all); + Assertions.assertTrue(all.contains("big.known: String!"), all); } // fernflower NestedClassProcessor.insertLocalVars: 'classNode = classNode.parent!!' after 23f8bf65 @@ -282,7 +286,7 @@ static String early(NavigableMap map, String k) { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("String", s.get("a.b.DN.Range.lowerBound"), s + "\n" + explain(report)); assertTrue(locals(report).contains("early.v: String?"), "read before the test: " + locals(report)); @@ -312,7 +316,7 @@ static class Holder { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("Object?", s.get("a.b.FI.Context.(Object):0:connection"), s + "\n" + explain(report)); assertEquals("V!", s.get("a.b.FI.Holder.(Object):0:value"), "a type variable's instantiation: " + s); @@ -349,7 +353,7 @@ public Task removeTask(Object key) { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("Task?", s.get("a.b.RT.Impl.removeTask(Object)"), s + "\n" + explain(report)); } @@ -369,7 +373,7 @@ Status status() { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("String", s.get("a.b.EV.Status.valueOf(String):0:name"), s + "\n" + explain(report)); } @@ -409,7 +413,7 @@ public Slave getUpdateInfo() { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("Slave?", s.get("a.b.RN.getSlave(String)"), s + "\n" + explain(report)); assertEquals("Slave?", s.get("a.b.RN.getUpdateInfo()"), s + "\n" + explain(report)); @@ -442,7 +446,7 @@ int bits() { }; } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("CF?", s.get("a.b.CF.(String,a.b.CF):1:lower"), s + "\n" + explain(report)); assertEquals("String", s.get("a.b.CF.(String,a.b.CF):0:name"), s + "\n" + explain(report)); @@ -475,7 +479,7 @@ void testCopyOfNulls() { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertFalse(s.get("a.b.RF.wrap(Class):0:type").endsWith("?"), s + "\n" + explain(report)); assertFalse(s.get("a.b.RF.copyOf(java.util.Map):0:map").startsWith("Map?"), s + "\n" + explain(report)); @@ -498,7 +502,7 @@ void test() { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("String", s.get("a.b.RN.put(String):0:key"), s.toString()); assertEquals("String?", s.get("a.b.RN.size(String):0:s"), "another exception: still evidence"); @@ -601,7 +605,7 @@ class LR { static String trimmed(String s) { return s.trim(); } } """); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(label(info), k(pt))); assertEquals("String?", s.get("value()"), s.toString()); assertEquals("String", s.get("trimmed()"), s.toString()); @@ -621,7 +625,7 @@ class CL { static ClassLoader bootstrap() { return String.class.getClassLoader(); } } """); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(label(info), k(pt))); assertEquals("ClassLoader", s.get("own()"), s.toString()); assertEquals("ClassLoader", s.get("literal()"), s.toString()); @@ -639,7 +643,7 @@ class SP { static String custom() { return System.getProperty("my.app.home"); } } """); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(label(info), k(pt))); assertEquals("String", s.get("os()"), s.toString()); assertEquals("String?", s.get("custom()"), s.toString()); @@ -677,7 +681,7 @@ private OG(String result, Msg successfulMsg, Object successfulResult, Msg castMs Msg successfulMsg() { return successfulMsg; } } """); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(label(info), k(pt))); assertEquals("Msg?", s.get("(1:successfulMsg)"), s.toString()); assertEquals("Msg?", s.get("successfulMsg"), s.toString()); @@ -725,7 +729,7 @@ private OGR(Result result, String successfulText, Object successfulResult, List< private void overloadedThis(Policy policy) { Report report = run("a.b.OGR", OVERLOADED_THIS, policy); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(label(info) + (info instanceof ParameterInfo pi ? pi.methodInfo().parameters().stream().map(q -> q.parameterizedType().typeInfo().simpleName()) .collect(Collectors.joining(",", "[", "]")) : ""), k(pt))); @@ -760,7 +764,7 @@ static final class Msg { static Msg from(String s) { return new Msg(); } } Msg msg() { return msg; } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(label(info) + (info instanceof ParameterInfo pi ? pi.methodInfo().parameters().stream().map(q -> q.parameterizedType().typeInfo().simpleName()) .collect(Collectors.joining(",", "[", "]")) : ""), k(pt))); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestSwitches.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestSwitches.java index 9aef6e545..0d175ec0d 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestSwitches.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestSwitches.java @@ -3,6 +3,9 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.function.Function; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -15,8 +18,8 @@ public class TestSwitches extends NullabilityFixtures { @DisplayName("Switches: a gate switched off in-process changes the next pass, as its environment variable does") @Test public void gateSwitchedOffInProcess() { - java.util.function.Function local = name -> { - Map l = new java.util.TreeMap<>(); + Function local = name -> { + Map l = new TreeMap<>(); run("a.b." + name, """ package a.b; import java.util.ArrayList; @@ -38,11 +41,11 @@ Set nonNull(List values) { return l.get("nonNullAdditions"); }; assertEquals("Set", local.apply("GS1")); - Switches.offForNextPasses(java.util.Set.of("NONULLFILTERS")); + Switches.offForNextPasses(Set.of("NONULLFILTERS")); try { assertEquals("Set", local.apply("GS2")); } finally { - Switches.offForNextPasses(java.util.Set.of()); + Switches.offForNextPasses(Set.of()); } assertEquals("Set", local.apply("GS3")); } diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestVerdicts.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestVerdicts.java index 23a791e54..30803ae31 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestVerdicts.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/nullability/TestVerdicts.java @@ -2,8 +2,11 @@ import static org.junit.jupiter.api.Assertions.assertEquals; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.TreeMap; import java.util.stream.Collectors; import org.intellij.lang.annotations.Language; @@ -11,6 +14,7 @@ import org.junit.jupiter.api.Test; import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.statement.LocalVariableCreation; /** * {@link Verdicts}: what the verdicts make of the closure, stored-only parameters and asserted locals. @@ -79,10 +83,10 @@ public void assertedAtDeclaration() { nonNull.block: Block reassigned.block: Block?""", locals(report)); // the printer's lookup, by declaring element - List asserted = new java.util.ArrayList<>(); + List asserted = new ArrayList<>(); for (MethodInfo mi : parsed.methods()) { mi.methodBody().visit(e -> { - if (e instanceof io.codelaser.maddi.cst.api.statement.LocalVariableCreation lvc) { + if (e instanceof LocalVariableCreation lvc) { lvc.localVariableStream().filter(lv -> report.assertedAtDeclaration(mi, lvc, lv)) .forEach(lv -> asserted.add(mi.name() + "." + lv.simpleName())); } @@ -123,10 +127,10 @@ void notCertain(int n) { } } """, Policy.KOTLIN); - List asserted = new java.util.ArrayList<>(); + List asserted = new ArrayList<>(); for (MethodInfo mi : parsed.methods()) { mi.methodBody().visit(e -> { - if (e instanceof io.codelaser.maddi.cst.api.statement.LocalVariableCreation lvc) { + if (e instanceof LocalVariableCreation lvc) { lvc.localVariableStream().filter(lv -> report.assertedAtDeclaration(mi, lvc, lv)) .forEach(lv -> asserted.add(mi.name() + "." + lv.simpleName())); } @@ -173,11 +177,11 @@ static void next(int j) { } """, Policy.KOTLIN); System.out.println(explain(report)); - List asserted = new java.util.ArrayList<>(); - List unobserved = new java.util.ArrayList<>(); + List asserted = new ArrayList<>(); + List unobserved = new ArrayList<>(); for (MethodInfo mi : parsed.methods()) { mi.methodBody().visit(e -> { - if (e instanceof io.codelaser.maddi.cst.api.statement.LocalVariableCreation lvc) { + if (e instanceof LocalVariableCreation lvc) { lvc.localVariableStream().forEach(lv -> { if (report.assertedAtDeclaration(mi, lvc, lv)) asserted.add(mi.name() + "." + lv.simpleName()); if (report.unobservedBeforeDereference(mi, lvc, lv)) { @@ -188,8 +192,8 @@ static void next(int j) { return true; }); } - java.util.Collections.sort(asserted); - java.util.Collections.sort(unobserved); + Collections.sort(asserted); + Collections.sort(unobserved); assertEquals("[alias.block, key.from, key.to, next.block, range.block]", asserted.toString()); // key.from: fernflower ControlFlowGraph:337, 'to = instrBlocks.get(...)' reads the container, not 'from'; // range.block: ControlFlowGraph:351, 'protectedRange.add(block)' refers to it; @@ -228,7 +232,7 @@ static class Builder { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("Executor?", s.get("a.b.RA.Builder.executor(java.util.concurrent.Executor):0:executor"), s.toString()); assertEquals("String", s.get("a.b.RA.Builder.name(String):0:name"), s.toString()); @@ -261,7 +265,7 @@ static class Derived extends Base { } } """, Policy.KOTLIN); - Map s = new java.util.TreeMap<>(); + Map s = new TreeMap<>(); report.verdicts().forEach((info, pt) -> s.put(info.fullyQualifiedName(), k(pt))); assertEquals("String", s.get("a.b.SO.Switch.replace(String,String):1:newValue"), s.toString()); assertEquals("String", s.get("a.b.SO.Statement.replace(String,String):1:newValue"), s.toString()); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/rewire/TestDerivedRewire.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/rewire/TestDerivedRewire.java index 49055dff8..970a8331f 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/rewire/TestDerivedRewire.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/rewire/TestDerivedRewire.java @@ -28,6 +28,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import io.codelaser.maddi.cst.api.analysis.PropertyValueMap; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; @@ -135,9 +136,9 @@ public void testFullCarry() throws IOException { // the analyzer-output rewire must not throw (every kept property implements rewire) and carries strictly more than // the carryOnRewire-filtered rewire. - io.codelaser.maddi.cst.api.analysis.PropertyValueMap full = + PropertyValueMap full = assertDoesNotThrow(() -> getMethod.analysis().rewire(infoMap, AnalysisFingerprint.ANALYZER_OUTPUT_ONLY)); - io.codelaser.maddi.cst.api.analysis.PropertyValueMap filtered = getMethod.analysis().rewire(infoMap); + PropertyValueMap filtered = getMethod.analysis().rewire(infoMap); assertTrue(full.propertyValueStream().count() > filtered.propertyValueStream().count(), "the analyzer-output rewire carries verdicts + links; the plain rewire keeps only carryOnRewire"); @@ -148,7 +149,7 @@ public void testFullCarry() throws IOException { "rewire drops METHOD_LINKS (not carryOnRewire)"); // the abstract method's IMPLEMENTATIONS survive a full carry, re-pointed to the rewired implementation - io.codelaser.maddi.cst.api.analysis.PropertyValueMap abstractFull = + PropertyValueMap abstractFull = assertDoesNotThrow(() -> abstractM.analysis().rewire(infoMap, AnalysisFingerprint.ANALYZER_OUTPUT_ONLY)); ValueImpl.SetOfMethodInfoImpl impls = abstractFull .getOrNull(PropertyImpl.IMPLEMENTATIONS, ValueImpl.SetOfMethodInfoImpl.class); diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestReachabilityOnClosure.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestReachabilityOnClosure.java index cfb645a9e..8f08cd275 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestReachabilityOnClosure.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestReachabilityOnClosure.java @@ -2,15 +2,19 @@ import static org.junit.jupiter.api.Assertions.assertEquals; +import java.io.IOException; import java.util.*; +import java.util.function.Predicate; import java.util.stream.Collectors; import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DynamicTest; import org.junit.jupiter.api.TestFactory; +import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.PropertyValueMap; +import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -155,12 +159,12 @@ public List fixpoint() { () -> assertClosureEqualsCold(edited, false))).toList(); } - private void assertClosureEqualsCold(String edited, boolean modReach) throws java.io.IOException { + private void assertClosureEqualsCold(String edited, boolean modReach) throws IOException { beforeEach(); // a fresh inspector: the same sources cannot be parsed twice in one ParseResult parseResult = javaInspector.parse(SOURCES, javaInspector.failFast()).parseResult(); Set all = SOURCES.keySet().stream().map(parseResult::findType).collect(Collectors.toSet()); G graph = prepAnalyzer.doPrimaryTypesReturnGraph(all); - List order = new io.codelaser.maddi.callgraph.ComputeAnalysisOrder().go(graph); + List order = new ComputeAnalysisOrder().go(graph); analyzer(modReach).analyze(order, graph); Map cold = verdicts(all); @@ -210,7 +214,7 @@ private static Set closure(TypeInfo edited, G graph) { } private static void clearCrossTypeDerived(TypeInfo t) { - java.util.function.Predicate toClear = p -> AnalysisFingerprint.CROSS_TYPE_DERIVED_ONLY.test(p) + Predicate toClear = p -> AnalysisFingerprint.CROSS_TYPE_DERIVED_ONLY.test(p) && !PropertyImpl.IMPLEMENTATIONS.key().equals(p.key()); t.analysis().removeIf(toClear); t.constructorAndMethodStream().forEach(m -> { @@ -237,7 +241,7 @@ private static Map verdicts(Set types) { private static String values(PropertyValueMap analysis) { return PROPERTIES.stream().map(p -> { - var v = analysis.getOrNull(p, io.codelaser.maddi.cst.api.analysis.Value.class); + var v = analysis.getOrNull(p, Value.class); return v == null ? null : p.key() + "=" + v; }).filter(Objects::nonNull).collect(Collectors.joining(" ")); } diff --git a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestShadowCloneBench.java b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestShadowCloneBench.java index 9040e5e3c..6e0d8f13c 100644 --- a/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestShadowCloneBench.java +++ b/maddi-modification-analyzer/src/test/java/io/codelaser/maddi/modification/analyzer/shadow/TestShadowCloneBench.java @@ -10,6 +10,7 @@ import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @@ -116,7 +117,7 @@ public void test() throws Exception { LOGGER.warn("Parsed {} types to analyze", types.size()); int parallelism = Integer.getInteger("clonebench.parallelism", - Math.max(1, Math.min(java.lang.Runtime.getRuntime().availableProcessors(), 4))); + Math.max(1, Math.min(Runtime.getRuntime().availableProcessors(), 4))); AtomicInteger counter = new AtomicInteger(); ConcurrentLinkedQueue queue = new ConcurrentLinkedQueue<>(types); ConcurrentLinkedQueue results = new ConcurrentLinkedQueue<>(); @@ -340,7 +341,7 @@ public void test() throws Exception { // args), 9 closed (for-each/while over a collection parameter: ArrayList_AddAt_Copy, Map_Foreach, // toNameClassMap, listToString, cutVectors, ...), 1 divergence opened (Function739845.listeners); by // 10-27 one more closed; and one opened between maddi 2d18e29b9 and 35184db60 (getFileAsString's Charset). - org.junit.jupiter.api.Assertions.assertEquals(348, totalRev, + Assertions.assertEquals(348, totalRev, "reverse divergences are expected since design A (110695ece) retired the " + "walkable-summary seed channel; re-baseline deliberately, and reclassify"); // Re-baselined 2026-09-22 for the RECEIVER-DISCLAIMER rule (@IgnoreModifications on a parameter now @@ -358,10 +359,10 @@ public void test() throws Exception { // classified with the reverse re-baseline above. // 2026-10-30: unmodifiedField 12 -> 13, unmodifiedParameter 43 -> 34, {propagated 46 -> 38, seed 10}; // classified with the reverse re-baseline above. - org.junit.jupiter.api.Assertions.assertEquals( + Assertions.assertEquals( Map.of("nonModifyingMethod", 1, "unmodifiedField", 13, "unmodifiedParameter", 34), byProperty); - org.junit.jupiter.api.Assertions.assertEquals(Map.of("propagated", 38, "seed", 10), byClass); + Assertions.assertEquals(Map.of("propagated", 38, "seed", 10), byClass); } private volatile int totalMethods, totalSeeds, totalEdges, totalMissingArgLinks, totalUnprojectedReceivers; diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/AnalysisHelper.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/AnalysisHelper.java index c2982abb3..13dc17478 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/AnalysisHelper.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/AnalysisHelper.java @@ -21,7 +21,10 @@ import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE; import static io.codelaser.maddi.cst.impl.analysis.ValueImpl.IndependentImpl.*; +import java.util.AbstractMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.SourceSet; @@ -121,20 +124,20 @@ and what that implementation carries is hidden content (road-to-immutability: "e visible. Gate NOEXTENSIBLEHC: the substitution for every type, as before. */ private static final boolean EXTENSIBLE_HC_OFF = System.getenv("NOEXTENSIBLEHC") != null; - private static final ThreadLocal> HC_VISITING = - ThreadLocal.withInitial(java.util.HashSet::new); + private static final ThreadLocal> HC_VISITING = + ThreadLocal.withInitial(HashSet::new); private boolean hiddenContentOnlyFromTypeParameters(TypeInfo typeInfo) { if (EXTENSIBLE_HC_OFF) return true; if (typeInfo.isExtensible()) return false; if (!isPartOfSourceCode(typeInfo)) return true; - java.util.Set visiting = HC_VISITING.get(); + Set visiting = HC_VISITING.get(); if (!visiting.add(typeInfo)) return true; // a recursive type: decided by its other fields try { // the type's own type parameters read as deeply immutable, at any depth (Optional's T); matched on the // type parameter, not on ParameterizedType equality, which includes annotations and nullability - java.util.Set own = java.util.Set.copyOf(typeInfo.typeParameters()); - Map typeParametersImmutable = new java.util.AbstractMap<>() { + Set own = Set.copyOf(typeInfo.typeParameters()); + Map typeParametersImmutable = new AbstractMap<>() { @Override public Value.Immutable get(Object key) { return key instanceof ParameterizedType pt && pt.arrays() == 0 && pt.typeParameter() != null @@ -142,8 +145,8 @@ public Value.Immutable get(Object key) { } @Override - public java.util.Set> entrySet() { - return java.util.Set.of(); + public Set> entrySet() { + return Set.of(); } }; for (var fieldInfo : typeInfo.fields()) { diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/AnnotationToProperty.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/AnnotationToProperty.java index bae559aef..dcda51e68 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/AnnotationToProperty.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/AnnotationToProperty.java @@ -22,6 +22,7 @@ import static io.codelaser.maddi.modification.common.defaults.ShallowAnalyzer.AnnotationOrigin.*; import java.util.*; +import java.util.function.Function; import java.util.stream.Stream; import org.slf4j.Logger; @@ -40,8 +41,12 @@ import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.expression.AnnotationExpression; +import io.codelaser.maddi.cst.api.expression.ArrayInitializer; +import io.codelaser.maddi.cst.api.expression.Expression; +import io.codelaser.maddi.cst.api.expression.IntConstant; import io.codelaser.maddi.cst.api.info.*; import io.codelaser.maddi.cst.api.runtime.Runtime; +import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.inspection.api.util.CreateSyntheticFieldsForGetSet; @@ -81,7 +86,7 @@ protected T leastOfHierarchy(TypeInfo typeInfo, Property prope .reduce(bestValue, (t1, t2) -> (T) t1.min(t2)); } - private static io.codelaser.maddi.cst.api.type.ParameterizedType declaredType(Info info) { + private static ParameterizedType declaredType(Info info) { return switch (info) { case MethodInfo mi -> mi.returnType(); case FieldInfo fi -> fi.type(); @@ -96,11 +101,11 @@ private static io.codelaser.maddi.cst.api.type.ParameterizedType declaredType(In */ private static Value.Nullability withNullableArguments(ValueImpl.NullabilityImpl top, AnnotationExpression ae, Info info) { - io.codelaser.maddi.cst.api.type.ParameterizedType declared = declaredType(info); + ParameterizedType declared = declaredType(info); List positions = nullableArguments(ae); if (positions.isEmpty() || declared == null) return top; int n = declared.arrays() > 0 ? 1 : declared.parameters().size(); - List arguments = new java.util.ArrayList<>(); + List arguments = new ArrayList<>(); for (int i = 0; i < n; i++) { arguments.add(positions.contains(i) ? ValueImpl.NullabilityImpl.NULLABLE : ValueImpl.NullabilityImpl.UNSPECIFIED); @@ -112,7 +117,7 @@ private static Value.Nullability withNullableArguments(ValueImpl.NullabilityImpl } private static List nullableArguments(AnnotationExpression ae) { - List positions = new java.util.ArrayList<>(); + List positions = new ArrayList<>(); for (AnnotationExpression.KV kv : ae.keyValuePairs()) { if (!"nullableArguments".equals(kv.key())) continue; collectInts(kv.value(), positions); @@ -120,10 +125,10 @@ private static List nullableArguments(AnnotationExpression ae) { return positions; } - private static void collectInts(io.codelaser.maddi.cst.api.expression.Expression e, List out) { - if (e instanceof io.codelaser.maddi.cst.api.expression.IntConstant ic) { + private static void collectInts(Expression e, List out) { + if (e instanceof IntConstant ic) { out.add(ic.constant()); - } else if (e instanceof io.codelaser.maddi.cst.api.expression.ArrayInitializer ai) { + } else if (e instanceof ArrayInitializer ai) { ai.expressions().forEach(x -> collectInts(x, out)); } } @@ -426,7 +431,7 @@ protected Map annotationsToMap(Info info, List maker, + Function maker, String annotation) { if (label.isBlank()) { LOGGER.warn("{} without a mark label on {}", annotation, info); diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/ShallowTypeAnalyzer.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/ShallowTypeAnalyzer.java index 17ae7e0a2..ecb7158be 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/ShallowTypeAnalyzer.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/defaults/ShallowTypeAnalyzer.java @@ -30,6 +30,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.function.Predicate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -332,7 +333,7 @@ public void check(TypeInfo typeInfo) { /** The evidence for a hierarchy inconsistency: each public supertype whose value is below the threshold. */ private Message[] supertypesBelow(TypeInfo typeInfo, Property property, Value defaultValue, - java.util.function.Predicate below) { + Predicate below) { return typeInfo.recursiveSuperTypeStream().filter(TypeInfo::isPublic).distinct() .map(ti -> Map.entry(ti, ti.analysis().getOrDefault(property, defaultValue))) .filter(e -> below.test(e.getValue())) diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/getset/ApplyGetSetTranslation.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/getset/ApplyGetSetTranslation.java index a3a23d6b8..5bc5d6095 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/getset/ApplyGetSetTranslation.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/getset/ApplyGetSetTranslation.java @@ -19,6 +19,8 @@ import static io.codelaser.maddi.cst.impl.analysis.PropertyImpl.GET_SET_FIELD; +import java.util.function.BiConsumer; + import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.Source; import io.codelaser.maddi.cst.api.expression.*; @@ -31,7 +33,7 @@ import io.codelaser.maddi.cst.impl.analysis.ValueImpl; public record ApplyGetSetTranslation(Runtime runtime, - java.util.function.BiConsumer observer) + BiConsumer observer) implements TranslationMap { public ApplyGetSetTranslation(Runtime runtime) { diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/getset/GetSetHelper.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/getset/GetSetHelper.java index f8fb0b8f5..4aa8af4bb 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/getset/GetSetHelper.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/getset/GetSetHelper.java @@ -19,6 +19,8 @@ import static io.codelaser.maddi.inspection.api.util.CreateSyntheticFieldsForGetSet.*; +import java.util.List; + import io.codelaser.maddi.annotation.Fluent; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.expression.Assignment; @@ -109,7 +111,7 @@ public static boolean doGetSetAnalysis(MethodInfo methodInfo, Block methodBody) return methodInfo.analysis().getOrCreate(PropertyImpl.GET_SET_FIELD, () -> { // peel a prefix of inert guard statements; recognition then runs on the first non-inert statement int guards = leadingInertGuardCount(methodInfo, methodBody); - java.util.List statements = methodBody.statements(); + List statements = methodBody.statements(); if (guards >= statements.size()) return null; // only guards, no return/assignment: not an accessor Statement s0 = statements.get(guards); // a non-local return (a Kotlin lambda's) does not return this method's value: not a getter diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/Culprits.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/Culprits.java index 9dd924797..432d97bca 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/Culprits.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/Culprits.java @@ -19,6 +19,7 @@ import java.net.URI; import java.util.List; +import java.util.Objects; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.Element; @@ -74,7 +75,7 @@ public static void add(List chain, Value.Culprit.Step step) if (!chain.isEmpty()) { Value.Culprit.Step last = chain.getLast(); if (last.line() == step.line() && last.column() == step.column() - && java.util.Objects.equals(last.uri(), step.uri())) { + && Objects.equals(last.uri(), step.uri())) { chain.set(chain.size() - 1, step); return; } diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolateClass.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolateClass.java index e6faf00d8..61852bccc 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolateClass.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolateClass.java @@ -1,14 +1,20 @@ package io.codelaser.maddi.modification.common.util; +import java.lang.annotation.Annotation; import java.util.ArrayList; +import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; +import java.util.IdentityHashMap; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; +import java.util.TreeSet; +import java.util.stream.Collectors; import java.util.stream.Stream; import org.slf4j.Logger; @@ -139,7 +145,7 @@ public CompilationUnit isolated() { /** every static import the emitted project needs, over all its isolated units */ public Set staticImports() { return staticImportsPerType.values().stream().flatMap(Set::stream) - .collect(java.util.stream.Collectors.toCollection(java.util.TreeSet::new)); + .collect(Collectors.toCollection(TreeSet::new)); } /** @@ -211,7 +217,7 @@ boolean recordStaticImport(TypeInfo owner, String memberName) { // Returning false sends the caller down its ordinary path, which puts the member on the stub of the // type that declares it -- where the isolated type inherits it from, exactly as in the original. if (isolatedTypeInherits(currentOriginalType, owner)) return false; - staticImports.computeIfAbsent(currentOriginalType, _ -> new java.util.TreeSet<>()) + staticImports.computeIfAbsent(currentOriginalType, _ -> new TreeSet<>()) .add(owner.fullyQualifiedName() + "." + memberName); return true; } @@ -236,7 +242,7 @@ TypeInfo selfType() { // the isolated types' own members, which are printed verbatim and so need no stub; identity, because two // overloads of one name are different members and only the exact one is already declared final Set keptVerbatim = - java.util.Collections.newSetFromMap(new java.util.IdentityHashMap<>()); + Collections.newSetFromMap(new IdentityHashMap<>()); /** * The test is "is this method kept verbatim, and is the owner a type that has it", NOT "is the owner the @@ -491,7 +497,7 @@ private void declareIsolatedType(ClassStubs data, TypeInfo typeInfo, TypeInfo is } if (typeInfo.isAnnotation()) { // as for an annotation stub: the interface every annotation type implements, and its own @Target - TypeInfo annotation = javaInspector.compiledTypesManager().type(java.lang.annotation.Annotation.class); + TypeInfo annotation = javaInspector.compiledTypesManager().type(Annotation.class); isolated.builder().addInterfaceImplemented(annotation.asSimpleParameterizedType()); data.copyMetaAnnotations(typeInfo, isolated); } @@ -552,11 +558,11 @@ private void declareIsolatedType(ClassStubs data, TypeInfo typeInfo, TypeInfo is */ private static Map> arbitrateImports(ClassStubs data) { Set singleImportedByOriginal = data.originalTypes.stream() - .map(TypeInfo::compilationUnit).filter(java.util.Objects::nonNull) + .map(TypeInfo::compilationUnit).filter(Objects::nonNull) .flatMap(cu -> cu.importStatements().stream()) .filter(is -> !is.isStar()) .map(is -> is.importString()) - .collect(java.util.stream.Collectors.toUnmodifiableSet()); + .collect(Collectors.toUnmodifiableSet()); // candidate -> was it named by its simple name in the verbatim text? Map candidates = new LinkedHashMap<>(); // The sibling isolates, and ONLY when there is more than one: a candidate is a type some OTHER unit may diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolateMethod.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolateMethod.java index afd8cd960..80de9c4b3 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolateMethod.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolateMethod.java @@ -118,7 +118,7 @@ public Result isolate(MethodInfo methodInfo) { * * @param known the placement evidence of a previous round, or null to decide on the reference at hand */ - private MethodStubs buildData(MethodInfo methodInfo, io.codelaser.maddi.cst.api.runtime.Runtime runtime, + private MethodStubs buildData(MethodInfo methodInfo, Runtime runtime, String simpleName, Placement known) { TypeInfo originalType = methodInfo.typeInfo().primaryType(); CompilationUnit newCu = runtime.newCompilationUnitBuilder() @@ -162,7 +162,7 @@ private MethodStubs buildData(MethodInfo methodInfo, io.codelaser.maddi.cst.api. public Result isolate(MethodInfo methodInfo, String customClassName) { TypeInfo originalType = methodInfo.typeInfo().primaryType(); - io.codelaser.maddi.cst.api.runtime.Runtime runtime = javaInspector.runtime(); + Runtime runtime = javaInspector.runtime(); String simpleName = customClassName == null ? originalType.simpleName() + "_" + methodInfo.name() : customClassName; diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolationCore.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolationCore.java index 4bda522f3..29ace7d60 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolationCore.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/IsolationCore.java @@ -1,5 +1,6 @@ package io.codelaser.maddi.modification.common.util; +import java.lang.annotation.Annotation; import java.util.*; import java.util.function.Predicate; import java.util.stream.Stream; @@ -304,7 +305,7 @@ TypeInfo ensureType(TypeInfo typeInfo, DetailedSources ds) { if (typeInfo.isAnnotation()) { // an annotation type must implement java.lang.annotation.Annotation (asserted on commit) TypeInfo annotation = javaInspector.compiledTypesManager() - .type(java.lang.annotation.Annotation.class); + .type(Annotation.class); stub.builder().addInterfaceImplemented(annotation.asSimpleParameterizedType()); copyMetaAnnotations(typeInfo, stub); } else { diff --git a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/TolerantWrite.java b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/TolerantWrite.java index 969af75f1..4f357385b 100644 --- a/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/TolerantWrite.java +++ b/maddi-modification-common/src/main/java/io/codelaser/maddi/modification/common/util/TolerantWrite.java @@ -3,6 +3,13 @@ import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.PropertyValueMap; import io.codelaser.maddi.cst.api.analysis.Value; +import java.util.Collections; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.LongAdder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,11 +33,11 @@ private TolerantWrite() { // convergence diagnosis: successful (value-changing) writes per property key, reset per iteration by the // iterating analyzer. Covers every setAllowControlledOverwrite in link+analyzer (they all route through // here); plain set() sites (write-once) do not oscillate and are not counted. - private static final java.util.concurrent.ConcurrentHashMap - CHANGES = new java.util.concurrent.ConcurrentHashMap<>(); + private static final ConcurrentHashMap + CHANGES = new ConcurrentHashMap<>(); - public static java.util.Map changeCounts() { - java.util.Map result = new java.util.TreeMap<>(); + public static Map changeCounts() { + Map result = new TreeMap<>(); CHANGES.forEach((k, v) -> result.put(k, v.sum())); return result; } @@ -44,11 +51,11 @@ public static void resetChangeCounts() { // "no change" = invisible to the verification passes, so a fixpoint can certify prematurely-frozen // optimistic values. Count refusals per property so the iterating analyzer can surface (and, under // STRICTCERT=1, refuse) such a certification. - private static final java.util.concurrent.ConcurrentHashMap - REFUSED_DOWNGRADES = new java.util.concurrent.ConcurrentHashMap<>(); + private static final ConcurrentHashMap + REFUSED_DOWNGRADES = new ConcurrentHashMap<>(); - public static java.util.Map refusedDowngrades() { - java.util.Map result = new java.util.TreeMap<>(); + public static Map refusedDowngrades() { + Map result = new TreeMap<>(); REFUSED_DOWNGRADES.forEach((k, v) -> result.put(k, v.sum())); return result; } @@ -61,7 +68,7 @@ public static java.util.Map refusedDowngrades() { public static final String RECOMPUTED = "recomputed:"; public static void count(String key) { - CHANGES.computeIfAbsent(key, _ -> new java.util.concurrent.atomic.LongAdder()).increment(); + CHANGES.computeIfAbsent(key, _ -> new LongAdder()).increment(); } /** @@ -73,7 +80,7 @@ public static void setOnce(PropertyValueMap analysis, Property Object context) { if (MODIFICATION_FROZEN && MODIFICATION_PROPERTIES.contains(property.key())) return; analysis.set(property, value); - CHANGES.computeIfAbsent(property.key(), _ -> new java.util.concurrent.atomic.LongAdder()).increment(); + CHANGES.computeIfAbsent(property.key(), _ -> new LongAdder()).increment(); if (context != null && !(context instanceof String) && !INTERNAL_PROPERTIES.contains(property.key())) { CHANGED_TARGETS.add(context); } @@ -118,7 +125,7 @@ public static boolean setLatestWins(PropertyValueMap analysis, if (RETAINTRACE) System.out.println("RT latest " + context); if (!analysis.overwrite(property, value)) return false; } - CHANGES.computeIfAbsent(property.key(), _ -> new java.util.concurrent.atomic.LongAdder()).increment(); + CHANGES.computeIfAbsent(property.key(), _ -> new LongAdder()).increment(); if (context != null && !(context instanceof String) && !INTERNAL_PROPERTIES.contains(property.key())) { CHANGED_TARGETS.add(context); } @@ -130,19 +137,19 @@ public static boolean setLatestWins(PropertyValueMap analysis, // element-INTERNAL (statement-level) properties: their changes are invisible to dependents and must not // propagate through the worklist (a ParameterInfo context can reach here via UNMODIFIED_VARIABLE) - private static final java.util.Set INTERNAL_PROPERTIES = - java.util.Set.of("unmodifiedVariable", "structurallyUnmodifiedVariable", "downcastVariable", + private static final Set INTERNAL_PROPERTIES = + Set.of("unmodifiedVariable", "structurallyUnmodifiedVariable", "downcastVariable", "variablesLinkedToObject", "linkedVariablesArguments"); // worklist support: the targets (Info / ParameterInfo contexts) of value-CHANGING writes this iteration. // Captures writes that land on an element OTHER than the one currently being processed (the link computer's // on-demand recursion writing a callee's METHOD_LINKS) — counter-delta attribution alone misses those. - private static final java.util.Set CHANGED_TARGETS = - java.util.Collections.synchronizedSet(new java.util.HashSet<>()); + private static final Set CHANGED_TARGETS = + Collections.synchronizedSet(new HashSet<>()); - public static java.util.Set changedTargets() { + public static Set changedTargets() { synchronized (CHANGED_TARGETS) { - return new java.util.HashSet<>(CHANGED_TARGETS); + return new HashSet<>(CHANGED_TARGETS); } } @@ -167,7 +174,7 @@ public static void resetChangedTargets() { // gate UNMODOWN=1: allow the true->false / weakening direction for the evidence-accumulating modification // properties (see the downgrade branch below); OFF by default pending the verdict A/B private static final boolean UNMODOWN = System.getenv("UNMODOWN") != null; - private static final java.util.Set EVIDENCE_ACCUMULATING = java.util.Set.of( + private static final Set EVIDENCE_ACCUMULATING = Set.of( "unmodifiedVariable", "unmodifiedParameter", "unmodifiedField", "nonModifyingMethod", "structurallyUnmodifiedVariable", "structurallyUnmodifiedParameter", "structurallyUnmodifiedField", "structurallyNonModifyingMethod"); @@ -178,7 +185,7 @@ public static void resetChangedTargets() { // could silently undo a pass downgrade. Set by the iterating analyzer after the pass, RESET at the // start of every analyze() (JVM-wide static; tests run several analyses per JVM). private static volatile boolean MODIFICATION_FROZEN; - private static final java.util.Set MODIFICATION_PROPERTIES = java.util.Set.of( + private static final Set MODIFICATION_PROPERTIES = Set.of( "unmodifiedParameter", "unmodifiedField", "nonModifyingMethod", // their structural twins (#25), written by the same pass "structurallyUnmodifiedParameter", "structurallyUnmodifiedField", "structurallyNonModifyingMethod"); @@ -232,7 +239,7 @@ public static boolean setAllowControlledOverwrite(PropertyValu if (RETAINTRACE) System.out.println("RT upgrade " + context); boolean upgraded = analysis.overwrite(property, value); if (upgraded) { - CHANGES.computeIfAbsent(property.key(), _ -> new java.util.concurrent.atomic.LongAdder()) + CHANGES.computeIfAbsent(property.key(), _ -> new LongAdder()) .increment(); if (context != null && !(context instanceof String) && !INTERNAL_PROPERTIES.contains(property.key())) { CHANGED_TARGETS.add(context); @@ -256,7 +263,7 @@ public static boolean setAllowControlledOverwrite(PropertyValu LOGGER.debug("Downgrading {} {} -> {} on {}", property.key(), current, value, context); boolean downgraded = analysis.overwrite(property, value); if (downgraded) { - CHANGES.computeIfAbsent(property.key(), _ -> new java.util.concurrent.atomic.LongAdder()) + CHANGES.computeIfAbsent(property.key(), _ -> new LongAdder()) .increment(); if (context != null && !(context instanceof String) && !INTERNAL_PROPERTIES.contains(property.key())) { CHANGED_TARGETS.add(context); @@ -266,14 +273,14 @@ public static boolean setAllowControlledOverwrite(PropertyValu } LOGGER.warn("Keeping {}={}, refusing downgrade to {} on {}", property.key(), current, value, context); REFUSED_DOWNGRADES.computeIfAbsent(property.key(), - _ -> new java.util.concurrent.atomic.LongAdder()).increment(); + _ -> new LongAdder()).increment(); return false; } } changed = analysis.setAllowControlledOverwrite(property, value); } if (changed) { - CHANGES.computeIfAbsent(property.key(), _ -> new java.util.concurrent.atomic.LongAdder()).increment(); + CHANGES.computeIfAbsent(property.key(), _ -> new LongAdder()).increment(); if (context != null && !(context instanceof String) && !INTERNAL_PROPERTIES.contains(property.key())) { CHANGED_TARGETS.add(context); } diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass5Group.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass5Group.java index be2c2b857..305ddd900 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass5Group.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass5Group.java @@ -4,9 +4,11 @@ import static org.junit.jupiter.api.Assertions.*; import java.io.IOException; +import java.util.Arrays; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Set; import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; @@ -110,7 +112,7 @@ public String render() { private Map isolate(String... fqns) { var parsed = javaInspector.parse(SOURCES, new JavaInspector.ParseOptions.Builder().setDetailedSources(true).setFailFast(true).build()); - List types = java.util.Arrays.stream(fqns).map(parsed.parseResult()::findType).toList(); + List types = Arrays.stream(fqns).map(parsed.parseResult()::findType).toList(); IsolateClass.Result r = isolateClass.isolate(types); Map memberSources = new LinkedHashMap<>(); for (MethodInfo original : r.markers().values()) { @@ -150,7 +152,7 @@ private static String verbatim(String unitSource, MethodInfo methodInfo) { @Test public void projectLayout() throws IOException { Map tree = isolate("a.b.Client", "p.q.Sub", "p.q.Base"); - assertEquals(java.util.Set.of("a/b/Client.java", "p/q/Base.java", "p/q/Sub.java", "r/s/Helper.java"), + assertEquals(Set.of("a/b/Client.java", "p/q/Base.java", "p/q/Sub.java", "r/s/Helper.java"), tree.keySet(), tree.keySet().toString()); // every isolate keeps its own body; Helper is the only thing reduced to a stub diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass6FreshFactories.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass6FreshFactories.java index 4bca1e3ef..db71c5021 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass6FreshFactories.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass6FreshFactories.java @@ -6,6 +6,7 @@ import java.io.IOException; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.regex.Matcher; @@ -271,7 +272,7 @@ public void freshFactoriesOfAKeptType() throws IOException { var parsed = javaInspector.parse(sources, new JavaInspector.ParseOptions.Builder().setDetailedSources(true).setFailFast(true).build()); // the group isolate: Use AND Item verbatim, the way a corpus driver carries a DTO beside its host - IsolateClass.Result r = isolateClass.isolate(java.util.List.of(parsed.parseResult().findType("a.b.Use"), + IsolateClass.Result r = isolateClass.isolate(List.of(parsed.parseResult().findType("a.b.Use"), parsed.parseResult().findType("p.q.Item"))); Map memberSources = new LinkedHashMap<>(); for (MethodInfo original : r.markers().values()) { diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass8Natures.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass8Natures.java index da574127d..b98eea1a6 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass8Natures.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestIsolateClass8Natures.java @@ -4,6 +4,7 @@ import static org.junit.jupiter.api.Assertions.*; import java.io.IOException; +import java.util.Arrays; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -144,7 +145,7 @@ public class Holder { private Map isolate(String... fqns) { var parsed = javaInspector.parse(SOURCES, new JavaInspector.ParseOptions.Builder().setDetailedSources(true).setFailFast(true).build()); - List types = java.util.Arrays.stream(fqns).map(parsed.parseResult()::findType).toList(); + List types = Arrays.stream(fqns).map(parsed.parseResult()::findType).toList(); IsolateClass.Result r = isolateClass.isolate(types); Map memberSources = new LinkedHashMap<>(); for (MethodInfo original : r.markers().values()) { diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestTypeBoundWildcardPrinting.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestTypeBoundWildcardPrinting.java index c4be0fdb4..6cd94bce4 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestTypeBoundWildcardPrinting.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/TestTypeBoundWildcardPrinting.java @@ -2,6 +2,9 @@ import static org.junit.jupiter.api.Assertions.assertEquals; +import java.util.Collections; +import java.util.EnumMap; + import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -17,11 +20,11 @@ public class TestTypeBoundWildcardPrinting extends CommonIsolateMethodTest { @Test public void boundWildcardNotPrinted() { parse("a.b.X", "package a.b; class X {}"); // initialize the inspector - TypeInfo enumMap = javaInspector.compiledTypesManager().type(java.util.EnumMap.class); + TypeInfo enumMap = javaInspector.compiledTypesManager().type(EnumMap.class); assertEquals("K extends Enum", enumMap.typeParameters().getFirst() .print(javaInspector.runtime().qualificationSimpleNames(), true).toString()); - TypeInfo collections = javaInspector.compiledTypesManager().type(java.util.Collections.class); + TypeInfo collections = javaInspector.compiledTypesManager().type(Collections.class); MethodInfo sort = collections.methodStream() .filter(m -> m.name().equals("sort") && m.parameters().size() == 1) .findFirst().orElseThrow(); diff --git a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/defaults/TestInheritedNullability.java b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/defaults/TestInheritedNullability.java index c7a85c056..25abe403a 100644 --- a/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/defaults/TestInheritedNullability.java +++ b/maddi-modification-common/src/test/java/io/codelaser/maddi/modification/common/defaults/TestInheritedNullability.java @@ -21,6 +21,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import java.io.IOException; +import java.util.Arrays; import java.util.List; import java.util.Map; @@ -66,7 +67,7 @@ void compute(Object key, BiFunction f) { } } private String inherit(ParameterizedType pt, List priority, String... shapes) { - List declared = java.util.Arrays.stream(shapes) + List declared = Arrays.stream(shapes) .map(s -> new Declared(pt, NullabilityImpl.fromShape(s))).toList(); return ((NullabilityImpl) inherited(NullableState.NONNULL, pt, declared, priority)).shape(); } diff --git a/maddi-modification-common/src/testFixtures/java/io/codelaser/maddi/modification/common/CommonTest.java b/maddi-modification-common/src/testFixtures/java/io/codelaser/maddi/modification/common/CommonTest.java index af5680381..f1805763a 100644 --- a/maddi-modification-common/src/testFixtures/java/io/codelaser/maddi/modification/common/CommonTest.java +++ b/maddi-modification-common/src/testFixtures/java/io/codelaser/maddi/modification/common/CommonTest.java @@ -16,6 +16,7 @@ import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.inspection.api.integration.JavaInspectorFactory; import io.codelaser.maddi.inspection.api.resource.InputConfiguration; +import io.codelaser.maddi.inspection.openjdk.JavaInspectorImpl; import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; import io.codelaser.maddi.inspection.resource.SourceSetImpl; import io.codelaser.maddi.support.SetOnce; @@ -41,7 +42,7 @@ public class CommonTest { // classpath -- which is how OrgE2immuSupport stopped resolving. SourceSet maddiAnnotation = SourceSetImpl.sourceSetOf(Immutable.class); SourceSet maddiSupport = SourceSetImpl.sourceSetOf(SetOnce.class, maddiAnnotation); - SourceSet slf4jApi = SourceSetImpl.sourceSetOf(org.slf4j.Logger.class); + SourceSet slf4jApi = SourceSetImpl.sourceSetOf(Logger.class); SourceSet logbackClassic = SourceSetImpl.sourceSetOf(Logger.class); SourceSet junitPlatform = SourceSetImpl.sourceSetOf(JUnitException.class); SourceSet jupiter = SourceSetImpl.sourceSetOf(Test.class, junitPlatform); @@ -92,14 +93,14 @@ public JavaInspector withSources(SourceSet sourceSet) throws IOException { // classpath -- which is how OrgE2immuSupport stopped resolving. SourceSet maddiAnnotation = SourceSetImpl.sourceSetOf(Immutable.class); SourceSet maddiSupport = SourceSetImpl.sourceSetOf(SetOnce.class, maddiAnnotation); - SourceSet slf4jApi = SourceSetImpl.sourceSetOf(org.slf4j.Logger.class); + SourceSet slf4jApi = SourceSetImpl.sourceSetOf(Logger.class); SourceSet logbackClassic = SourceSetImpl.sourceSetOf(Logger.class); SourceSet junitPlatform = SourceSetImpl.sourceSetOf(JUnitException.class); SourceSet jupiter = SourceSetImpl.sourceSetOf(Test.class, junitPlatform); SourceSet opentest4j = SourceSetImpl.sourceSetOf(AssertionFailedError.class); SourceSet annotations = SourceSetImpl.sourceSetOf(NotNull.class); - JavaInspector javaInspector = new io.codelaser.maddi.inspection.openjdk.JavaInspectorImpl(); + JavaInspector javaInspector = new JavaInspectorImpl(); javaInspector.preload("java.base::java.util."); javaInspector.preload("java.base::java.net"); javaInspector.preload("java.base::java.io"); diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/LinkComputer.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/LinkComputer.java index 84ea025b2..a09d10b0b 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/LinkComputer.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/LinkComputer.java @@ -1,6 +1,8 @@ package io.codelaser.maddi.modification.link; import java.util.List; +import java.util.Map; +import java.util.Set; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -36,8 +38,8 @@ default void recordSummaryConsumption(MethodInfo consumer, MethodInfo consumed) // no-op by default } - default java.util.Map> consumedSummaries() { - return java.util.Map.of(); + default Map> consumedSummaries() { + return Map.of(); } int propertiesChanged(); diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ExpressionVisitor.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ExpressionVisitor.java index 006e811ad..f8cc9969d 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ExpressionVisitor.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ExpressionVisitor.java @@ -11,6 +11,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import io.codelaser.maddi.cst.api.analysis.PropertyValueMap; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.RecordPattern; import io.codelaser.maddi.cst.api.expression.*; @@ -704,7 +705,7 @@ private Result linkInnerClassToOuterInstance(ConstructorCall cc, Result created) // last-write-wins for the element-internal call-site argument links; same monitor discipline as // TolerantWrite (PropertyValueMapImpl's own methods synchronize on the map) - private static void writeArgumentLinks(io.codelaser.maddi.cst.api.analysis.PropertyValueMap analysis, + private static void writeArgumentLinks(PropertyValueMap analysis, LinkComputer.ListOfLinks list) { synchronized (analysis) { if (analysis.haveAnalyzedValueFor(LinkComputerImpl.LINKED_VARIABLES_ARGUMENTS)) { diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkComputerImpl.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkComputerImpl.java index 86ef4d95d..35b5c2d4f 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkComputerImpl.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkComputerImpl.java @@ -6,8 +6,11 @@ import static io.codelaser.maddi.modification.prepwork.variable.impl.VariableInfoImpl.UNMODIFIED_VARIABLE; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.LongAdder; +import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -78,8 +81,8 @@ public class LinkComputerImpl implements LinkComputer, LinkComputerRecursion { // inclusion inherits modification semantics into a type-aliasing question (over-rejection // in extract-interface); measure before filtering. static final boolean VL2O_TIER = Gate.isSet("VL2OTIER"); - static final java.util.concurrent.atomic.LongAdder VL2O_ASSIGNMENT_TIER = new java.util.concurrent.atomic.LongAdder(); - static final java.util.concurrent.atomic.LongAdder VL2O_CONTENT_TIER = new java.util.concurrent.atomic.LongAdder(); + static final LongAdder VL2O_ASSIGNMENT_TIER = new LongAdder(); + static final LongAdder VL2O_CONTENT_TIER = new LongAdder(); public static String vl2oTierStats() { return "VL2O tier stats: assignment=" + VL2O_ASSIGNMENT_TIER.sum() @@ -172,17 +175,17 @@ public LinkComputerImpl(JavaInspector javaInspector, Options options, AtomicInte // worklist support (see LinkComputer.recordSummaryConsumption): NOT cleared by reset() — dependencies // persist across iterations, and a subset iteration only re-records what it actually re-computes - private final java.util.Map> consumedSummaries = - new java.util.concurrent.ConcurrentHashMap<>(); + private final Map> consumedSummaries = + new ConcurrentHashMap<>(); @Override public void recordSummaryConsumption(MethodInfo consumer, MethodInfo consumed) { - consumedSummaries.computeIfAbsent(consumer, _ -> java.util.concurrent.ConcurrentHashMap.newKeySet()) + consumedSummaries.computeIfAbsent(consumer, _ -> ConcurrentHashMap.newKeySet()) .add(consumed); } @Override - public java.util.Map> consumedSummaries() { + public Map> consumedSummaries() { return consumedSummaries; } @@ -301,7 +304,7 @@ private MethodLinkedVariables doMethod(MethodInfo methodInfo, boolean shallow, b String linkTrace = System.getenv("LINKTRACE"); boolean trace = linkTrace != null && methodInfo.fullyQualifiedName().contains(linkTrace); if (trace) { - io.codelaser.maddi.modification.link.impl.graph.IncrementalFixpointEngine.TRACE = true; + IncrementalFixpointEngine.TRACE = true; System.out.println("LT >>> " + methodInfo.fullyQualifiedName()); } SourceMethodComputer computer = new SourceMethodComputer(methodInfo); @@ -352,7 +355,7 @@ private MethodLinkedVariables doMethod(MethodInfo methodInfo, boolean shallow, b Graph.setAltSources(altSourcesOff, altSourcesUsed); recursionPrevention.doneSource(methodInfo); if (trace) { - io.codelaser.maddi.modification.link.impl.graph.IncrementalFixpointEngine.TRACE = false; + IncrementalFixpointEngine.TRACE = false; System.out.println("LT <<< " + methodInfo.fullyQualifiedName()); } } @@ -384,7 +387,7 @@ private static boolean missingPrepData(MethodInfo methodInfo) { consumes a degraded method (a shallow summary, variable data without links) can be tested without building a method that is expensive enough to trip it. Null outside such a test. */ - public static volatile java.util.function.Predicate DEGRADE_FOR_TESTING; + public static volatile Predicate DEGRADE_FOR_TESTING; // atomically: another thread linking the same callee may mark it too, and 'set' refuses any overwrite static void markDegraded(MethodInfo methodInfo) { @@ -449,7 +452,7 @@ private static Links withoutFieldCycles(Links links) { // bare marker 'oc:N' is not a face static boolean isFaceOfObjectCreation(Variable v) { Variable primary = Util.primary(v); - return primary instanceof io.codelaser.maddi.modification.prepwork.variable.ObjectCreationVariable + return primary instanceof ObjectCreationVariable && !primary.equals(v); } @@ -461,15 +464,15 @@ static boolean isFaceOfObjectCreation(Variable v) { private static final String TRIP_DIAG_FULL = System.getenv("TRIPDIAG_FULL"); // LINKINPUTS=: the same input fingerprint at EVERY linking of a matching method, tripped or not private static final String LINK_INPUTS = System.getenv("LINKINPUTS"); - private final java.util.concurrent.atomic.AtomicInteger tripDiagCount = new java.util.concurrent.atomic.AtomicInteger(); + private final AtomicInteger tripDiagCount = new AtomicInteger(); private void tripDiag(MethodInfo methodInfo, Graph graph) { int n = tripDiagCount.incrementAndGet(); StringBuilder sb = new StringBuilder(); sb.append("TRIPDIAG#").append(n).append(" graph=").append(graph.size()).append(" closure=") .append(graph.sizeOfClosure()).append(" method=").append(methodInfo.fullyQualifiedName()).append('\n'); - java.util.Set inputs = new java.util.TreeSet<>(java.util.Comparator.comparing(MethodInfo::fullyQualifiedName)); - inputs.addAll(consumedSummaries.getOrDefault(methodInfo, java.util.Set.of())); + Set inputs = new TreeSet<>(Comparator.comparing(MethodInfo::fullyQualifiedName)); + inputs.addAll(consumedSummaries.getOrDefault(methodInfo, Set.of())); inputs.add(methodInfo); for (MethodInfo callee : inputs) { MethodLinkedVariables mlv = callee.analysis().getOrNull(METHOD_LINKS, MethodLinkedVariablesImpl.class); @@ -542,7 +545,7 @@ javaInspector, options, new VirtualFieldComputer(javaInspector), // see Options.objectGraphLinks: the coarse ∩/≤/≥ web is not consumed by linking's applications and // is quadratic on deep structures; PRODUCTION excludes those labels from the closure entirely boolean nullTerminal = options.nullConstantReturns() && !Gate.isSet("NULLCOMPOSE"); - java.util.function.Predicate valid = options.objectGraphLinks() + Predicate valid = options.objectGraphLinks() ? LinkNature::valid : ln -> ln.valid() && ln != LinkNatureImpl.OBJECT_GRAPH_OVERLAPS && ln != LinkNatureImpl.IS_IN_OBJECT_GRAPH && ln != LinkNatureImpl.OBJECT_GRAPH_CONTAINS; @@ -691,7 +694,7 @@ public MethodLinkedVariables go() { .filter(vi -> modified.contains(vi.variable()) && vi.isStructurallyUnmodified()) .map(VariableInfo::variable) .collect(Collectors.toUnmodifiableSet()); - java.util.function.Predicate deepOnly = v -> + Predicate deepOnly = v -> (!modified.contains(v) || deepOnlyInVd.contains(v)) && (!modifiedOutside.contains(v) || !modificationsOutsideStructural.contains(v)); Set allDeepOnly = allModified.stream().filter(deepOnly).collect(Collectors.toUnmodifiableSet()); @@ -787,7 +790,7 @@ private void copyModificationsIntoMethod(Set modified, Set d MethodLinkedVariables mlv) { // a throw-only placeholder with implementations: its modification is their union, written by the // abstract-method analyzer; the throwing body would claim @NotModified for every call (work list O2) - if (!methodInfo.isAbstract() && io.codelaser.maddi.modification.prepwork.Util.unionOverImplementations(methodInfo)) { + if (!methodInfo.isAbstract() && Util.unionOverImplementations(methodInfo)) { return; } boolean methodModified = false; @@ -1612,7 +1615,7 @@ private static boolean hasDefault(SwitchStatementOldStyle ss) { private List casesWithoutFallThrough(SwitchStatementOldStyle ss) { List statements = ss.block().statements(); - java.util.TreeSet starts = new java.util.TreeSet<>(); + TreeSet starts = new TreeSet<>(); ss.switchLabels().forEach(l -> starts.add(l.startFromPosition())); starts.add(statements.size()); List cases = new ArrayList<>(); diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkNatureImpl.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkNatureImpl.java index 10fb480bc..d7cde5cc7 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkNatureImpl.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/LinkNatureImpl.java @@ -82,10 +82,10 @@ private LinkNatureImpl(String symbol, int rank, int score, Set pass) if (pass.isEmpty()) { this.pass = pass; } else { - java.util.TreeSet sorted = - new java.util.TreeSet<>(java.util.Comparator.comparing(MethodInfo::fullyQualifiedName)); + TreeSet sorted = + new TreeSet<>(Comparator.comparing(MethodInfo::fullyQualifiedName)); sorted.addAll(pass); - this.pass = java.util.Collections.unmodifiableSortedSet(sorted); + this.pass = Collections.unmodifiableSortedSet(sorted); } this.score = score; } diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/MethodLinkedVariablesImpl.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/MethodLinkedVariablesImpl.java index e0509ee87..32c806b80 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/MethodLinkedVariablesImpl.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/MethodLinkedVariablesImpl.java @@ -1,9 +1,12 @@ package io.codelaser.maddi.modification.link.impl; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Objects; import java.util.Set; +import java.util.TreeSet; import java.util.stream.Collectors; import org.jetbrains.annotations.NotNull; @@ -12,6 +15,7 @@ import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.InfoMapView; +import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.translate.TranslationMap; import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; @@ -56,12 +60,12 @@ public MethodLinkedVariablesImpl(Links ofReturnValue, // inherit run-to-run nondeterminism (the composed-dogfood 24 ↔ 10 bistability). Variable is // Comparable (FQN order, consistent with equals). this.modified = modified.isEmpty() ? modified - : java.util.Collections.unmodifiableSortedSet(new java.util.TreeSet<>(modified)); + : Collections.unmodifiableSortedSet(new TreeSet<>(modified)); this.assigned = assigned.isEmpty() ? assigned - : java.util.Collections.unmodifiableSortedSet(new java.util.TreeSet<>(assigned)); + : Collections.unmodifiableSortedSet(new TreeSet<>(assigned)); assert modified.containsAll(deepOnlyModified) : "deep-only is a subset of modified"; this.deepOnlyModified = deepOnlyModified.isEmpty() ? deepOnlyModified - : java.util.Collections.unmodifiableSortedSet(new java.util.TreeSet<>(deepOnlyModified)); + : Collections.unmodifiableSortedSet(new TreeSet<>(deepOnlyModified)); } @Override @@ -118,9 +122,9 @@ public static Value decode(Codec codec, Codec.Context context, Codec.EncodedValu List ofParams = encodedParams.stream() .map(e -> decodeLinks(codec, context, e)) .toList(); - Set modifiedVariables = new java.util.HashSet<>(); - Set assignedVariables = new java.util.HashSet<>(); - Set deepOnlyVariables = new java.util.HashSet<>(); + Set modifiedVariables = new HashSet<>(); + Set assignedVariables = new HashSet<>(); + Set deepOnlyVariables = new HashSet<>(); for (int i = 2; i < list.size(); i++) { Codec.EncodedValue e = list.get(i); List sub = codec.decodeList(context, e); @@ -159,7 +163,7 @@ private static void decodeLink(Codec codec, // pass-carrying ≡ variant (☷): [symbol, methodInfo...] — see LinksImpl.encodeLink List natureList = codec.decodeList(context, natureEv); assert "☷".equals(codec.decodeString(context, natureList.getFirst())); - java.util.Set pass = new java.util.HashSet<>(); + Set pass = new HashSet<>(); for (int i = 1; i < natureList.size(); i++) { pass.add(codec.decodeMethodInfo(context, natureList.get(i))); } diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ReceiverLevel.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ReceiverLevel.java index 15e13021d..03bd21331 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ReceiverLevel.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/ReceiverLevel.java @@ -36,6 +36,7 @@ import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; +import io.codelaser.maddi.modification.prepwork.Util; /** * The receiver of a call decides, next to the callee, whether the call modifies it. Two rules, both sound, @@ -214,7 +215,7 @@ public static List coneImplementationsForParameter(ParameterInfo pi, */ private static TypeInfo coneRoot(MethodInfo callee, ParameterizedType receiverType) { if (receiverType == null || receiverType.arrays() > 0) return null; - if (!io.codelaser.maddi.modification.prepwork.Util.unionOverImplementations(callee)) return null; + if (!Util.unionOverImplementations(callee)) return null; TypeInfo root = receiverType.typeInfo(); if (root == null || root.equals(callee.typeInfo())) return null; if (root.compilationUnit().externalLibrary()) return null; diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/WriteLinksAndModification.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/WriteLinksAndModification.java index 8a444778e..651409244 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/WriteLinksAndModification.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/WriteLinksAndModification.java @@ -5,6 +5,8 @@ import static io.codelaser.maddi.modification.prepwork.variable.impl.VariableInfoImpl.UNMODIFIED_VARIABLE; import java.util.*; +import java.util.function.Predicate; +import java.util.stream.Collectors; import java.util.stream.Stream; import org.jetbrains.annotations.NotNull; @@ -12,6 +14,7 @@ import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.expression.VariableExpression; import io.codelaser.maddi.cst.api.info.MethodInfo; +import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.api.statement.Statement; @@ -166,7 +169,7 @@ private ReuseContext prepareReuse() { // iterator's modification (next()) flipped the raw 'entries.§kvs ⊆ this.map.§kvs' (both // unmodified) because the iterator's derived ⊆ descended to it (TestMap test2Reverse0). Variable owner = flipOwner.get(link); - java.util.function.Predicate> acceptRaw = + Predicate> acceptRaw = owner == null || Gate.isSet("NOFLIPOWN") ? _ -> true : fact -> ownsFact(owner, fact); @@ -196,7 +199,7 @@ private ReuseContext prepareReuse() { }).sum(); Set unmarkedDeepOnly = deepOnlyDuringEvaluation.isEmpty() ? Set.of() : unmarkedModifications.stream().filter(deepOnlyDuringEvaluation::contains) - .collect(java.util.stream.Collectors.toUnmodifiableSet()); + .collect(Collectors.toUnmodifiableSet()); return new WriteResult(builtNewLinkedVariables, unmarkedModifications, unmarkedDeepOnly, sum); } @@ -235,7 +238,7 @@ private Map> expand(Map> mod */ private void closeOverModificationGroups(Map> modified) { if (modified.isEmpty() || Gate.isSet("NOVIEWCHAIN")) return; - java.util.ArrayDeque work = new java.util.ArrayDeque<>(modified.keySet()); + ArrayDeque work = new ArrayDeque<>(modified.keySet()); while (!work.isEmpty()) { Variable v = work.removeFirst(); Set causes = modified.get(v); @@ -313,12 +316,12 @@ private List doVariableReturnRecompute(Statement statement, // recompute (handleReturnVariable's marker prepend is not idempotent; return dirt is global // anyway); parameters recompute at the LAST statement, where the summary needs them complete // while cached links carry the redundancy suppression (see the NORL guard below). - java.util.Set detachedReps = + Set detachedReps = followGraph.graph().detachedReps(variable); if (reuse != null && detachedReps.isEmpty() // what they carry changes without touching the variable && !(variable instanceof ReturnVariable) - && !(lastStatement && variable instanceof io.codelaser.maddi.cst.api.info.ParameterInfo) + && !(lastStatement && variable instanceof ParameterInfo) && !reuse.dirty.contains(variable)) { Links prev = lastExtracted.get(variable); if (prev != null) { @@ -363,7 +366,7 @@ A variable a join evicted from its groups (SharedVariables.planJoin: its alterna it, without the identity with the other members. The plain join edge 'x ← rep' does not carry them: the engine derives no composite TARGETING a return value (a return evicted by a loop join lost 'm ∈ 0:g[0]'). */ - for (io.codelaser.maddi.modification.link.impl.localvar.SharedVariable rep : detachedReps) { + for (SharedVariable rep : detachedReps) { Links.Builder repLinks = followGraph.followGraph(virtualFieldComputer, rep); VariableTranslationMap repToVariable = new VariableTranslationMap(runtime); repToVariable.put(rep, variable); @@ -478,7 +481,7 @@ engine derives no composite TARGETING a return value (a return evicted by a loop // Returns stay complete (handled above); in the last statement, parameters stay complete too — the // method summary reads them there. if (!Gate.isSet("NORL") - && (!lastStatement || !(variable instanceof io.codelaser.maddi.cst.api.info.ParameterInfo))) { + && (!lastStatement || !(variable instanceof ParameterInfo))) { redundantLinks.redundantLinks(builder); } verdictAndFlips(statement, vi, variable, builder, previouslyModified, previouslyStructurallyModified, @@ -686,7 +689,7 @@ private void dedupReversePairs(Links.Builder builder) { // structural depth of a variable's access chain: b=0, b.variables=1, b.variables[0]=2 private static int depth(Variable v) { if (v instanceof FieldReference fr && fr.scopeVariable() != null) return 1 + depth(fr.scopeVariable()); - if (v instanceof io.codelaser.maddi.cst.api.variable.DependentVariable dv && dv.arrayVariable() != null) { + if (v instanceof DependentVariable dv && dv.arrayVariable() != null) { return 1 + depth(dv.arrayVariable()); } return 0; @@ -704,9 +707,9 @@ private void suppressRedundantScopeUps(Links.Builder builder) { */ record VPair(Variable from, Variable to) { } - Map> fromUp = new HashMap<>(); - Map> toUp = new HashMap<>(); - Map> bothUp = new HashMap<>(); + Map> fromUp = new HashMap<>(); + Map> toUp = new HashMap<>(); + Map> bothUp = new HashMap<>(); for (Link fine : links) { Set svFrom = Util.scopeVariables(fine.from()); Set svTo = Util.scopeVariables(fine.to()); diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/FollowGraph.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/FollowGraph.java index 2948af7cc..4cf51c398 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/FollowGraph.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/FollowGraph.java @@ -1,6 +1,7 @@ package io.codelaser.maddi.modification.link.impl.linkgraph; import java.util.ArrayList; +import java.util.Comparator; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -103,7 +104,7 @@ public Links.Builder followGraph(VirtualFieldComputer virtualFieldComputer, Vari // across its branches), so TimSort's result depends on the input order — which comes from unordered // graph.variables() and flickered run-to-run (the m∩copy determinism flake: emission order feeds the // block-set redundancy suppression). A stable sort on top of a canonical order is deterministic. - fromList.sort(java.util.Comparator + fromList.sort(Comparator .comparing((FromPair p) -> p.emitFrom().fullyQualifiedName()) .thenComparing(p -> p.queryFrom().fullyQualifiedName())); // parts-first refinement: the comparator is a PARTIAL, intransitive order, and TimSort THROWS @@ -230,7 +231,7 @@ public Links.Builder followGraph(VirtualFieldComputer virtualFieldComputer, Vari // append the reversed return-targeted facts in canonical order (they were collected iterating // unordered graph.variables()); the main loop registered both directions of every emitted link // in 'block', so a plain add-check dedups against it - reverseReturnFacts.sort(java.util.Comparator + reverseReturnFacts.sort(Comparator .comparing((LinksImpl.LinkImpl l) -> l.from().fullyQualifiedName()) .thenComparing(l -> l.linkNature().rank()) .thenComparing(l -> l.to().fullyQualifiedName())); @@ -243,7 +244,7 @@ public Links.Builder followGraph(VirtualFieldComputer virtualFieldComputer, Vari return builder; } - private static void insertionSortPartsFirst(java.util.List fromList) { + private static void insertionSortPartsFirst(List fromList) { for (int i = 1; i < fromList.size(); i++) { FromPair p = fromList.get(i); int j = i - 1; diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/Graph.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/Graph.java index 75b4820b5..83231a3b0 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/Graph.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/Graph.java @@ -3,11 +3,14 @@ import static io.codelaser.maddi.modification.link.impl.LinkNatureImpl.CONTAINS_AS_FIELD; import java.util.*; +import java.util.concurrent.atomic.AtomicLong; +import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; +import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.api.variable.DependentVariable; import io.codelaser.maddi.cst.api.variable.FieldReference; @@ -133,7 +136,7 @@ keep only the memberships all alternatives agree on (SharedVariables.joinAll), a public void join(List alternatives, String statementIndex) { SharedVariables.JoinPlan plan = sharedVariables.planJoin(alternatives.stream() .map(State::sharedVariables).toList()); - List linked = new java.util.ArrayList<>(alternatives.size()); + List linked = new ArrayList<>(alternatives.size()); for (int i = 0; i < alternatives.size(); i++) { List edges = plan.edgesPerAlternative().get(i); if (edges.isEmpty()) { @@ -220,7 +223,7 @@ public void evictReassignedSources(Set assigned, String statementIndex for (Variable v : assigned) { if (sharedVariables.isKnown(v) && sharedVariables.isSourceAtOtherStatement(v, statementIndex) && !sharedVariables.isReassignment(v, statementIndex) - && !(v instanceof io.codelaser.maddi.cst.api.info.ParameterInfo) + && !(v instanceof ParameterInfo) && !sharedVariables.groupHoldsReturnValue(v)) { clearRepExpansionCache(); touchVariable(v); @@ -401,7 +404,7 @@ public Set drainDirtyVariables() { // whole graph — reuse cannot pay off there, so bail to dirty-all (the pre-reuse behavior) // instead of grinding memory and CPU (the 512m test-worker OOM). Per-statement budget. long[] budget = {REUSE_BUDGET}; - java.util.function.Consumer push = v -> { + Consumer push = v -> { budget[0]--; if (dirty.add(v)) work.push(v); }; @@ -643,8 +646,8 @@ public Stream eqGroups(Variable variable) { decision and the ⊇→~ rewrite collection — emitted earlier, they leak into verdicts (the reverted VMIFP experiment: ⊇→~ fired, 'newly created cannot be modified' nearly flipped). */ - public java.util.List vmiDirectionalFacts(Variable owner) { - java.util.List result = new ArrayList<>(); + public List vmiDirectionalFacts(Variable owner) { + List result = new ArrayList<>(); virtualModificationIdenticals.groupsOf(owner).forEach(group -> { if (!group.linkNature().pass().isEmpty()) return; Variable face = group.members().stream() @@ -854,7 +857,7 @@ Plain edges cost more than a group, and some shapes cost more than the work ceil // the work ceiling, as soon as a statement marks alternatives: TestAlternativeSources' retry test public static volatile boolean DEGRADE_ON_ALT_SOURCES_FOR_TESTING; // recipients marked as alternatives, over the whole run: what the tests read (TestAlternativeSources) - public static final java.util.concurrent.atomic.AtomicLong ALT_MARKS = new java.util.concurrent.atomic.AtomicLong(); + public static final AtomicLong ALT_MARKS = new AtomicLong(); public static boolean altSourcesOff() { return ALT_SOURCES_OFF.get(); @@ -891,7 +894,7 @@ void markMultiValuedRecipients(List statementLinks) { // when this statement's own single-source assignments connect them ('copyD.a ← 1:a, copyD.a ← 0:d.a' with // the default '1:a ← 0:d.a'): union-find over the reps, along the single-source assignments Map parent = new HashMap<>(); - java.util.function.Function find = new java.util.function.Function<>() { + Function find = new Function<>() { @Override public Variable apply(Variable v) { Variable rep = sharedVariables.translateForward(v); @@ -995,7 +998,7 @@ boolean mergeEdgeBi(Variable from, LinkNature linkNature, Variable to, String st touchAll(sharedVariables.allShared(from)); touchAll(sharedVariables.allShared(to)); boolean fromInGroups = sharedVariables.isKnown(from); - if (fromInGroups && !(from instanceof io.codelaser.maddi.modification.prepwork.variable.ReturnVariable) + if (fromInGroups && !(from instanceof ReturnVariable) && sharedVariables.isReassignment(from, statementIndex)) { // genuine reassignment ('from' was assigned at an earlier statement, now assigned again): drop its // old group membership. A second value assigned in the SAME statement (multi-valued 'm = cond ? a : b' @@ -1005,7 +1008,7 @@ boolean mergeEdgeBi(Variable from, LinkNature linkNature, Variable to, String st sharedVariables.remove(from); // TODO what with fromInGraph? } else if (!NO_SRC_EVICT && fromInGroups && sharedVariables.isSourceAtOtherStatement(from, statementIndex) - && !(from instanceof io.codelaser.maddi.cst.api.info.ParameterInfo) + && !(from instanceof ParameterInfo) && !sharedVariables.groupHoldsReturnValue(from)) { // a source is assigned a new value: the group keeps the old one. The rep edge below made every // other member hold the new value as well ('x = h.next; h.next = y; return x' read '← 1:y', and @@ -1117,7 +1120,7 @@ private void transformToSharedVariable(Variable variable, // order decides which derivation paths fire first (see IncrementalFixpointEngine.addSymmetricEdge) var forwardLinksList = variablesInGraph .stream() - .sorted(java.util.Comparator.comparing(Variable::fullyQualifiedName)) + .sorted(Comparator.comparing(Variable::fullyQualifiedName)) .map(v -> new AbstractMap.SimpleEntry<>(v, engine.edges(v))) .toList(); engine.removeVertices(variablesInGraph); diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/SharedVariables.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/SharedVariables.java index 43d095a22..2968044ae 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/SharedVariables.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/SharedVariables.java @@ -1,24 +1,37 @@ package io.codelaser.maddi.modification.link.impl.linkgraph; +import java.util.ArrayDeque; +import java.util.ArrayList; import java.util.Collection; +import java.util.Deque; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.function.BiConsumer; +import java.util.function.BiPredicate; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; +import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.runtime.Runtime; +import io.codelaser.maddi.cst.api.variable.DependentVariable; import io.codelaser.maddi.cst.api.variable.FieldReference; +import io.codelaser.maddi.cst.api.variable.LocalVariable; import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.modification.link.impl.Gate; import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; +import io.codelaser.maddi.modification.link.impl.LinkVariable; import io.codelaser.maddi.modification.link.impl.localvar.IntermediateVariable; import io.codelaser.maddi.modification.link.impl.localvar.SharedVariable; import io.codelaser.maddi.modification.link.impl.translate.VariableTranslationMap; import io.codelaser.maddi.modification.prepwork.Util; import io.codelaser.maddi.modification.prepwork.variable.Link; +import io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; import io.codelaser.maddi.modification.prepwork.variable.impl.LinksImpl; // variant on EquivalenceGroup, to be used for equivalent SharedVariable objects @@ -44,17 +57,17 @@ reassignment cannot evict what a sibling branch recorded. The reps are shared by public record State(Map sharedVariablesByName, Map memberToGroup, VariableTranslationMap variableTranslationMap, - Map> membersByPrefix, + Map> membersByPrefix, Map data, - Map> detachedIn, - Map> evictedFrom) { + Map> detachedIn, + Map> evictedFrom) { public State copy() { - Map> detached = new HashMap<>(); - detachedIn.forEach((k, v) -> detached.put(k, new java.util.LinkedHashSet<>(v))); - Map> evicted = new HashMap<>(); - evictedFrom.forEach((k, v) -> evicted.put(k, new java.util.LinkedHashSet<>(v))); - Map> prefixes = new HashMap<>(); - membersByPrefix.forEach((k, v) -> prefixes.put(k, new java.util.LinkedHashSet<>(v))); + Map> detached = new HashMap<>(); + detachedIn.forEach((k, v) -> detached.put(k, new LinkedHashSet<>(v))); + Map> evicted = new HashMap<>(); + evictedFrom.forEach((k, v) -> evicted.put(k, new LinkedHashSet<>(v))); + Map> prefixes = new HashMap<>(); + membersByPrefix.forEach((k, v) -> prefixes.put(k, new LinkedHashSet<>(v))); Map dataCopy = new LinkedHashMap<>(); data.forEach((sv, d) -> dataCopy.put(sv, d.copy())); return new State(new LinkedHashMap<>(sharedVariablesByName), new LinkedHashMap<>(memberToGroup), @@ -96,14 +109,14 @@ public void restore(State state) { so that its own extraction still reconstructs them ('0:p ← 0:p.impliedBy' after 'p = p.impliedBy' in a loop body; assignmentEdgeStream). Indexed per variable: its next reassignment (remove) drops them. */ - private Map> detachedIn = new HashMap<>(); + private Map> detachedIn = new HashMap<>(); /* EVICTED members, recipients and sources alike, with the groups they were members of in some alternative of a join: they may still hold that group's object, so a modification of one reaches the others (detachedAliases). Unlike detachedIn, nothing is extracted from it. Dropped at the variable's next assignment. */ - private Map> evictedFrom = new HashMap<>(); + private Map> evictedFrom = new HashMap<>(); // CodeLaser/maddi-mod#77, see evictSource and Graph.mergeEdgeBi private static final boolean NO_SRC_EVICT = Gate.isSet("NOSRCEVICT"); @@ -225,35 +238,35 @@ directed link (reversed when 'primary' owns the to-side, so a parameter reads as Mirrors Graph.virtualModificationEdgeStream for the ≡ groups. */ public Stream assignmentEdgeStream(Variable primary, - java.util.function.BiPredicate mediatedHop) { + BiPredicate mediatedHop) { Stream.Builder builder = Stream.builder(); // The primary's faces: the primary plus its whole-object shared-group siblings. A collapsed 'return p' // groups the return with 'p', so a field assignment keyed on the sibling ('p.f ← 0:x') belongs to the // return, rehomed onto the return's face ('create2.f ← 0:x'). - java.util.Collection primaryFaces = allShared(primary); - for (SharedVariable sv : new java.util.LinkedHashSet<>(memberToGroup.values())) { + Collection primaryFaces = allShared(primary); + for (SharedVariable sv : new LinkedHashSet<>(memberToGroup.values())) { // The group's recorded 'a ← b' assignments form a directed chain; an intermediate ($__rv) merged in // the middle (makeFromGet.t ← $__rv ← box.t) breaks a direct pair once it is filtered out downstream. // So follow the chain transitively: emit 'm ← t' for every t reachable from m along ←, and its reverse. - java.util.Map> fwd = new java.util.HashMap<>(); - java.util.Map> bwd = new java.util.HashMap<>(); + Map> fwd = new HashMap<>(); + Map> bwd = new HashMap<>(); // unmediated-only adjacency for the chain-taint rule (task #39): a chain target is emitted // MEDIATED only when NO unmediated path reaches it — an unmediated path is genuine declared-type // coupling, and coupling (the consumer's conservative side) must win over provenance - java.util.Map> fwdU = new java.util.HashMap<>(); - java.util.Map> bwdU = new java.util.HashMap<>(); + Map> fwdU = new HashMap<>(); + Map> bwdU = new HashMap<>(); for (SharedVariable.Assignment a : sv.assignments()) { - fwd.computeIfAbsent(a.from(), k -> new java.util.ArrayList<>()).add(a.to()); - bwd.computeIfAbsent(a.to(), k -> new java.util.ArrayList<>()).add(a.from()); + fwd.computeIfAbsent(a.from(), k -> new ArrayList<>()).add(a.to()); + bwd.computeIfAbsent(a.to(), k -> new ArrayList<>()).add(a.from()); if (!mediatedHop.test(a.from(), a.to())) { - fwdU.computeIfAbsent(a.from(), k -> new java.util.ArrayList<>()).add(a.to()); - bwdU.computeIfAbsent(a.to(), k -> new java.util.ArrayList<>()).add(a.from()); + fwdU.computeIfAbsent(a.from(), k -> new ArrayList<>()).add(a.to()); + bwdU.computeIfAbsent(a.to(), k -> new ArrayList<>()).add(a.from()); } } - java.util.Collection emitters = sv.variables(); - java.util.Set detachedHere = detachedFroms(sv, primary); + Collection emitters = sv.variables(); + Set detachedHere = detachedFroms(sv, primary); if (!detachedHere.isEmpty()) { - emitters = new java.util.LinkedHashSet<>(sv.variables()); + emitters = new LinkedHashSet<>(sv.variables()); emitters.addAll(detachedHere); } for (Variable m : emitters) { @@ -275,12 +288,12 @@ public Stream assignmentEdgeStream(Variable primary, // (per-statement view) we also stay shallow, preserving the collapse's dedup ('ttt ← tt', not // the transitive 'ttt ← 0:t'). boolean deep = Util.primary(emitM) - instanceof io.codelaser.maddi.modification.prepwork.variable.ReturnVariable + instanceof ReturnVariable // parameters are summary endpoints too: '0:in → v → this.f' must reach the // field for the parameter's summary (var-transparency). Gate NOPDEEP. || !Gate.isSet("NOPDEEP") - && Util.primary(emitM) instanceof io.codelaser.maddi.cst.api.info.ParameterInfo; - java.util.Set fwdReachU = reachable(m, fwdU, deep); + && Util.primary(emitM) instanceof ParameterInfo; + Set fwdReachU = reachable(m, fwdU, deep); for (Variable t : reachable(m, fwd, deep)) { if (!emitM.equals(t)) { boolean mediatedT = !fwdReachU.contains(t); @@ -289,7 +302,7 @@ public Stream assignmentEdgeStream(Variable primary, // for-each row 'r ← g[0]' equally holds as 'm ← 0:g[0][0]' — the local face (r) dies at // summary time, the parameter face survives. Sources only: a recipient sibling of the // base may be reassigned later and must not be aliased. - if (t instanceof io.codelaser.maddi.cst.api.variable.DependentVariable dvT + if (t instanceof DependentVariable dvT && dvT.arrayVariable() != null) { for (Variable src : assignmentSources(dvT.arrayVariable())) { VariableTranslationMap aliasTm = new VariableTranslationMap(runtime); @@ -306,14 +319,14 @@ public Stream assignmentEdgeStream(Variable primary, // a derived face — td.variables[0] ← someSet, rehomed across the collapsed builder // chain — bypasses both): td.variables[0] ∈ td.variables, td.variables ∋ someSet. if (derivedFace - && emitM instanceof io.codelaser.maddi.cst.api.variable.DependentVariable dv + && emitM instanceof DependentVariable dv && dv.arrayVariable() != null && !Util.virtual(t)) { builder.add(new LinksImpl.LinkImpl(dv, LinkNatureImpl.IS_ELEMENT_OF, dv.arrayVariable())); builder.add(new LinksImpl.LinkImpl(dv.arrayVariable(), LinkNatureImpl.CONTAINS_AS_MEMBER, t)); } } } - java.util.Set bwdReachU = reachable(m, bwdU, deep); + Set bwdReachU = reachable(m, bwdU, deep); for (Variable t : reachable(m, bwd, deep)) { if (!emitM.equals(t)) { boolean mediatedT = !bwdReachU.contains(t); @@ -327,10 +340,10 @@ public Stream assignmentEdgeStream(Variable primary, // aliases (switch arms yielding list1/list2/list3: no flow between co-sources). if (!Gate.isSet("NORVSP") && t instanceof FieldReference - && Util.primary(t) instanceof io.codelaser.maddi.modification.prepwork.variable.ReturnVariable) { + && Util.primary(t) instanceof ReturnVariable) { for (Variable sib : allShared(t)) { if (!sib.equals(t) && !sib.equals(m) && !emitM.equals(sib) - && !(Util.primary(sib) instanceof io.codelaser.maddi.modification.prepwork.variable.ReturnVariable) + && !(Util.primary(sib) instanceof ReturnVariable) && !(Util.firstRealVariable(sib) instanceof IntermediateVariable) && sib instanceof FieldReference) { builder.add(new LinksImpl.LinkImpl(emitM, LinkNatureImpl.IS_ASSIGNED_TO, sib, @@ -346,15 +359,15 @@ public Stream assignmentEdgeStream(Variable primary, // 'method → this.ys[1]': the returned value was also stored in the slot). Dying faces // among the siblings are filtered downstream as usual. if (!Gate.isSet("NOSIBR")) { - java.util.Set sources = reachable(m, fwd, deep); + Set sources = reachable(m, fwd, deep); for (Variable src : sources) { - for (Variable sib : bwd.getOrDefault(src, java.util.List.of())) { + for (Variable sib : bwd.getOrDefault(src, List.of())) { if (!sib.equals(m) && !emitM.equals(sib) && !sources.contains(sib) // two index-SPELLINGS of the same slot (0:b[off++] / 0:b[1:off]) are not // sibling recipients — the pair carries no information and its direction // is arbitrary (flipped between class-run and full-suite contexts) - && !(sib instanceof io.codelaser.maddi.cst.api.variable.DependentVariable dvS - && m instanceof io.codelaser.maddi.cst.api.variable.DependentVariable dvM + && !(sib instanceof DependentVariable dvS + && m instanceof DependentVariable dvM && dvS.arrayVariable() != null && dvS.arrayVariable().equals(dvM.arrayVariable()))) { builder.add(new LinksImpl.LinkImpl(emitM, LinkNatureImpl.IS_ASSIGNED_TO, sib)); @@ -369,11 +382,11 @@ public Stream assignmentEdgeStream(Variable primary, // source does not guarantee identity); reassignment of the source evicts it from the group, // so both records still see the same value. Same-base DependentVariable pairs excluded // (spelling aliases, cf. the sibling-recipient rule above). - for (Variable src : fwd.getOrDefault(m, java.util.List.of())) { - for (Variable sib : bwd.getOrDefault(src, java.util.List.of())) { + for (Variable src : fwd.getOrDefault(m, List.of())) { + for (Variable sib : bwd.getOrDefault(src, List.of())) { if (!sib.equals(m) && !emitM.equals(sib) - && !(sib instanceof io.codelaser.maddi.cst.api.variable.DependentVariable dvS - && m instanceof io.codelaser.maddi.cst.api.variable.DependentVariable dvM + && !(sib instanceof DependentVariable dvS + && m instanceof DependentVariable dvM && dvS.arrayVariable() != null && dvS.arrayVariable().equals(dvM.arrayVariable()))) { builder.add(new LinksImpl.LinkImpl(emitM, @@ -388,8 +401,8 @@ public Stream assignmentEdgeStream(Variable primary, } // the detached recipients of 'sv' (see detachedIn) that are part of 'primary' - private java.util.Set detachedFroms(SharedVariable sv, Variable primary) { - java.util.Set result = new java.util.LinkedHashSet<>(); + private Set detachedFroms(SharedVariable sv, Variable primary) { + Set result = new LinkedHashSet<>(); detachedIn.forEach((v, reps) -> { if (reps.contains(sv) && Util.isPartOf(primary, v)) result.add(v); }); @@ -403,15 +416,15 @@ private java.util.Set detachedFroms(SharedVariable sv, Variable primar // downstream). The dimension guard is 'canChainThrough': never recurse through an array element // (DependentVariable) or any field/parameter/this face, which would link mismatched dimensions // (crashes on grid[0][0]/varargs). - private static java.util.Set reachable(Variable start, - java.util.Map> adj, + private static Set reachable(Variable start, + Map> adj, boolean deep) { - java.util.Set seen = new java.util.LinkedHashSet<>(); - java.util.Deque stack = new java.util.ArrayDeque<>(adj.getOrDefault(start, java.util.List.of())); + Set seen = new LinkedHashSet<>(); + Deque stack = new ArrayDeque<>(adj.getOrDefault(start, List.of())); while (!stack.isEmpty()) { Variable v = stack.pop(); if (seen.add(v) && canChainThrough(v, deep)) { - stack.addAll(adj.getOrDefault(v, java.util.List.of())); + stack.addAll(adj.getOrDefault(v, List.of())); } } return seen; @@ -421,7 +434,7 @@ private static java.util.Set reachable(Variable start, // proper field/element of a shared-group sibling of the primary (create2 ≡ p ⇒ 'p.f' -> 'create2.f'); null when // 'm' belongs to neither. The whole sibling ('p' itself, m.equals(face)) is skipped: its whole-object edge is // already emitted from the primary's own member, and rehoming it would produce a self-link. - private Variable faceKeyed(Variable m, Variable primary, java.util.Collection faces) { + private Variable faceKeyed(Variable m, Variable primary, Collection faces) { if (Util.isPartOf(primary, m)) return m; for (Variable face : faces) { if (!face.equals(primary) && !m.equals(face) && Util.isPartOf(face, m)) { @@ -459,15 +472,15 @@ loop body (asprof-style sampling, 2026-09-15): the transform packs thirty locals // an array access on an EXPRESSION base has no primary variable (clone-bench shapes) — nothing // to rehome the slot onto if (root == null) continue; - java.util.List sourceFaces; + List sourceFaces; if (root.equals(s)) { // whole-object source ('withException.exit ← $__c_a'): its own faces // ($__c_a.exception ← 0:e) rehome directly onto pf (withException.exit.exception). // (faceKeyed's sibling faces only cover this when the PRIMARY itself is in the // whole-object group; here only its field pf is.) - sourceFaces = java.util.List.of(s); + sourceFaces = List.of(s); } else { - sourceFaces = new java.util.ArrayList<>(); + sourceFaces = new ArrayList<>(); for (Variable sibling : allShared(root)) { VariableTranslationMap toSibling = new VariableTranslationMap(runtime); toSibling.put(root, sibling); @@ -494,10 +507,10 @@ loop body (asprof-style sampling, 2026-09-15): the transform packs thirty locals // vertex. Its base pf (ldIn.variables) IS a member; rehome the key onto the source-chain sibling faces // ($__rv124.variables[1]) and return THEIR groups' members ({matrix, 0:ld.variables[1], ...}): they denote the // same runtime slot, so a modification of the key is a modification of each of them. - public java.util.Set derivedShared(Variable key) { - if (Gate.isSet("NODF")) return java.util.Set.of(); - if (memberToGroup.containsKey(key)) return java.util.Set.of(); // allShared covers group members - java.util.Set result = new java.util.LinkedHashSet<>(); + public Set derivedShared(Variable key) { + if (Gate.isSet("NODF")) return Set.of(); + if (memberToGroup.containsKey(key)) return Set.of(); // allShared covers group members + Set result = new LinkedHashSet<>(); for (Variable pf : memberToGroup.keySet()) { if (pf.equals(key) || !Util.isPartOf(pf, key)) continue; for (Variable s : assignmentSources(pf)) { @@ -526,18 +539,18 @@ public java.util.Set derivedShared(Variable key) { private static boolean canChainThrough(Variable v, boolean deep) { if (Util.lvPrimaryOrNull(v) instanceof IntermediateVariable) return true; if (!deep) return false; - if (v instanceof io.codelaser.maddi.cst.api.variable.LocalVariable) return true; + if (v instanceof LocalVariable) return true; // a FOREIGN method's return face in the group (the SAM's 'get' rv when an anonymous class // captures a variable: m ← get ← 0:x) is a value pass-through, like a dying local; the // primary's own rv is never a chain node in its own extraction (it is the emitM) - if (v instanceof io.codelaser.maddi.modification.prepwork.variable.ReturnVariable) return true; + if (v instanceof ReturnVariable) return true; // the field face of a DYING LOCAL ('b.j' of builder 'b') does not survive into the summary either: // bridge it (justJ.j ← b.j ← 0:jp → justJ.j ← 0:jp). Plain FieldReference only (never a // DependentVariable — dimensions), and only on a real local (not a synthetic LinkVariable). - if (v instanceof io.codelaser.maddi.cst.api.variable.FieldReference fr) { + if (v instanceof FieldReference fr) { Variable pr = Util.primary(fr); - return pr instanceof io.codelaser.maddi.cst.api.variable.LocalVariable - && !(pr instanceof io.codelaser.maddi.modification.link.impl.LinkVariable); + return pr instanceof LocalVariable + && !(pr instanceof LinkVariable); } return false; } @@ -552,22 +565,22 @@ public boolean isKnown(Variable from) { (asprof 2026-08-05); membership mutations are rare, per-statement drains are not. Maintained in add() (first-time membership only — a member's prefixes never change) and remove(). */ - private Map> membersByPrefix = new HashMap<>(); + private Map> membersByPrefix = new HashMap<>(); - public java.util.Set membersRootedAt(Variable prefix) { - return membersByPrefix.getOrDefault(prefix, java.util.Set.of()); + public Set membersRootedAt(Variable prefix) { + return membersByPrefix.getOrDefault(prefix, Set.of()); } private void indexMember(Variable member) { - membersByPrefix.computeIfAbsent(member, _ -> new java.util.LinkedHashSet<>()).add(member); + membersByPrefix.computeIfAbsent(member, _ -> new LinkedHashSet<>()).add(member); for (Variable p : Util.scopeVariables(member)) { - membersByPrefix.computeIfAbsent(p, _ -> new java.util.LinkedHashSet<>()).add(member); + membersByPrefix.computeIfAbsent(p, _ -> new LinkedHashSet<>()).add(member); } } private void unindexMember(Variable member) { - java.util.function.BiConsumer rm = (p, m) -> { - java.util.Set set = membersByPrefix.get(p); + BiConsumer rm = (p, m) -> { + Set set = membersByPrefix.get(p); if (set != null) { set.remove(m); if (set.isEmpty()) membersByPrefix.remove(p); @@ -593,16 +606,16 @@ public Stream memberFieldsOf(Variable owner) { // {return, zs}, assignmentSources(return) = {zs}. Knowledge attached to a source (its §m equivalences, its // field-precise links) legitimately transfers to the recipient; the reverse direction does not (a pure source // must not inherit the recipient's links, see isPureAssignmentSource). - public java.util.Set assignmentSources(Variable variable) { + public Set assignmentSources(Variable variable) { SharedVariable sv = memberToGroup.get(variable); - if (sv == null) return java.util.Set.of(); + if (sv == null) return Set.of(); // memoized on the group: FollowGraph asks this once per sibling, per rep expansion, per graph vertex, and // that walk runs per method call in a statement -- so recomputing it is cubic in the length of a // straight-line method (task #22). The memo is dropped by every mutator of SharedVariable. return sv.assignmentSources(variable, v -> { - boolean deep = v instanceof io.codelaser.maddi.modification.prepwork.variable.ReturnVariable; - java.util.Set result = - new java.util.LinkedHashSet<>(reachable(v, sv.forwardAssignments(), deep)); + boolean deep = v instanceof ReturnVariable; + Set result = + new LinkedHashSet<>(reachable(v, sv.forwardAssignments(), deep)); result.retainAll(sv.variables()); return result; }); @@ -635,8 +648,8 @@ public String print(Function variablePrinter) { } // the reps of the groups 'variable' was evicted from by a join (empty when none): see detachedIn - public java.util.Set detachedReps(Variable variable) { - return detachedIn.getOrDefault(variable, java.util.Set.of()); + public Set detachedReps(Variable variable) { + return detachedIn.getOrDefault(variable, Set.of()); } /* @@ -646,14 +659,14 @@ member of its group any more (see detachedIn): the members detached from 'variab may be a modification of each of them: 'if (pred == null) first = succ; ... succ.pred = pred;' modifies the object 'first' holds on the path through the then-block (guava's LinkedHashMultimap.MultimapIterationChain). */ - public java.util.Set detachedAliases(Variable variable) { - if (evictedFrom.isEmpty()) return java.util.Set.of(); + public Set detachedAliases(Variable variable) { + if (evictedFrom.isEmpty()) return Set.of(); // the groups 'variable' belongs to, now or in some alternative - java.util.Set groups = new java.util.HashSet<>(evictedFrom.getOrDefault(variable, java.util.Set.of())); + Set groups = new HashSet<>(evictedFrom.getOrDefault(variable, Set.of())); SharedVariable sv = memberToGroup.get(variable); if (sv != null) groups.add(sv); - if (groups.isEmpty()) return java.util.Set.of(); - java.util.Set result = new java.util.LinkedHashSet<>(); + if (groups.isEmpty()) return Set.of(); + Set result = new LinkedHashSet<>(); for (SharedVariable group : groups) { if (group != sv) result.addAll(group.variables()); } @@ -674,7 +687,7 @@ public java.util.Set detachedAliases(Variable variable) { // 'variable' is (re)assigned: the assignments it received in earlier alternatives no longer describe it public void dropDetached(Variable variable) { if (!evictedFrom.isEmpty()) { - java.util.Set reps = evictedFrom.get(variable); + Set reps = evictedFrom.get(variable); // a group the variable is still the recorded source of holds its OLD object, which a further // reassignment does not change (evictSource): only the others go if (reps != null && (NO_SRC_EVICT || reps.removeIf(rep -> rep.assignments().stream() @@ -683,7 +696,7 @@ public void dropDetached(Variable variable) { } } if (detachedIn.isEmpty()) return; - java.util.Set detached = detachedIn.remove(variable); + Set detached = detachedIn.remove(variable); if (detached != null) { for (SharedVariable sv : detached) { if (sv.assignments().removeIf(a -> variable.equals(a.from()))) sv.invalidateMemos(); @@ -707,7 +720,7 @@ public void evictSource(Variable variable) { assert removed; // the group still holds the object the variable held: 'x = p; p = y; x.next = null' modifies the // caller's p (detachedAliases, WriteLinksAndModification.expand) - evictedFrom.computeIfAbsent(variable, _ -> new java.util.LinkedHashSet<>()).add(sv); + evictedFrom.computeIfAbsent(variable, _ -> new LinkedHashSet<>()).add(sv); } } @@ -715,7 +728,7 @@ public void evictSource(Variable variable) { public boolean groupHoldsReturnValue(Variable variable) { SharedVariable sv = memberToGroup.get(variable); return sv != null && sv.variables().stream().anyMatch(v -> - Util.primary(v) instanceof io.codelaser.maddi.modification.prepwork.variable.ReturnVariable); + Util.primary(v) instanceof ReturnVariable); } public void remove(Variable variable) { @@ -756,12 +769,12 @@ public JoinPlan planJoin(List alternatives) { alternatives.get(i).memberToGroup().forEach((member, rep) -> repsOf.computeIfAbsent(member, _ -> new SharedVariable[n])[ii] = rep); } - List> edges = new java.util.ArrayList<>(); - for (int i = 0; i < n; i++) edges.add(new java.util.ArrayList<>()); + List> edges = new ArrayList<>(); + for (int i = 0; i < n; i++) edges.add(new ArrayList<>()); Map kept = new LinkedHashMap<>(); - java.util.Set evicted = new java.util.HashSet<>(); + Set evicted = new HashSet<>(); repsOf.forEach((member, reps) -> { - java.util.Set distinct = new java.util.LinkedHashSet<>(); + Set distinct = new LinkedHashSet<>(); boolean everywhere = true; boolean pureSource = true; for (int i = 0; i < n; i++) { @@ -792,20 +805,20 @@ public JoinPlan planJoin(List alternatives) { // what its members established), the kept members, and the records that mention no evicted member Map byName = new LinkedHashMap<>(); Map data = new LinkedHashMap<>(); - Map> detached = new HashMap<>(); + Map> detached = new HashMap<>(); // detached records the alternatives already carried stay detached (their variable is no member) - Map> evictedFrom = new HashMap<>(); + Map> evictedFrom = new HashMap<>(); for (State alternative : alternatives) { alternative.detachedIn().forEach((v, reps) -> { - if (!kept.containsKey(v)) detached.computeIfAbsent(v, _ -> new java.util.LinkedHashSet<>()).addAll(reps); + if (!kept.containsKey(v)) detached.computeIfAbsent(v, _ -> new LinkedHashSet<>()).addAll(reps); }); alternative.evictedFrom().forEach((v, reps) -> - evictedFrom.computeIfAbsent(v, _ -> new java.util.LinkedHashSet<>()).addAll(reps)); + evictedFrom.computeIfAbsent(v, _ -> new LinkedHashSet<>()).addAll(reps)); } repsOf.forEach((member, reps) -> { if (!evicted.contains(member)) return; for (SharedVariable rep : reps) { - if (rep != null) evictedFrom.computeIfAbsent(member, _ -> new java.util.LinkedHashSet<>()).add(rep); + if (rep != null) evictedFrom.computeIfAbsent(member, _ -> new LinkedHashSet<>()).add(rep); } }); for (State alternative : alternatives) { @@ -820,18 +833,18 @@ public JoinPlan planJoin(List alternatives) { for (SharedVariable.Assignment a : d.assignments()) { if (!joined.assignments().contains(a)) joined.assignments().add(a); if (evicted.contains(a.from())) { - detached.computeIfAbsent(a.from(), _ -> new java.util.LinkedHashSet<>()).add(rep); + detached.computeIfAbsent(a.from(), _ -> new LinkedHashSet<>()).add(rep); } } }); } VariableTranslationMap vtm = new VariableTranslationMap(runtime); - Map> prefixes = new HashMap<>(); + Map> prefixes = new HashMap<>(); kept.forEach((member, rep) -> { vtm.put(member, rep); - prefixes.computeIfAbsent(member, _ -> new java.util.LinkedHashSet<>()).add(member); + prefixes.computeIfAbsent(member, _ -> new LinkedHashSet<>()).add(member); for (Variable pv : Util.scopeVariables(member)) { - prefixes.computeIfAbsent(pv, _ -> new java.util.LinkedHashSet<>()).add(member); + prefixes.computeIfAbsent(pv, _ -> new LinkedHashSet<>()).add(member); } }); return new JoinPlan(edges, new State(byName, new LinkedHashMap<>(kept), vtm, prefixes, data, detached, @@ -848,7 +861,7 @@ private static boolean isRecipient(State state, SharedVariable rep, Variable mem same state and would otherwise pick the same fresh name for two different groups, which a join (whose graph vertices are keyed by name) would then confuse. */ - private final java.util.Set reservedNames = new java.util.HashSet<>(); + private final Set reservedNames = new HashSet<>(); private int alternativeDepth; public void enterAlternatives() { diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/VirtualModificationIdenticals.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/VirtualModificationIdenticals.java index 88c9b6253..94e695be2 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/VirtualModificationIdenticals.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/linkgraph/VirtualModificationIdenticals.java @@ -1,10 +1,12 @@ package io.codelaser.maddi.modification.link.impl.linkgraph; import java.util.HashMap; +import java.util.Iterator; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.BiConsumer; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -48,7 +50,7 @@ private VirtualModificationIdenticals(AtomicInteger groupIdProvider) { // the join of two alternatives: every group of the other joined in here (overlapping groups merge) public void unionWith(VirtualModificationIdenticals other) { other.groups.values().forEach(g -> { - java.util.Iterator it = g.members().iterator(); + Iterator it = g.members().iterator(); if (!it.hasNext()) return; Variable first = it.next(); while (it.hasNext()) add(first, g.linkNature(), it.next()); @@ -87,7 +89,7 @@ private void indexMember(Variable member) { } private void unindexMember(Variable member) { - java.util.function.BiConsumer rm = (p, m) -> { + BiConsumer rm = (p, m) -> { Set set = membersByPrefix.get(p); if (set != null) { set.remove(m); diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/SharedVariable.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/SharedVariable.java index bde481464..54a9819a6 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/SharedVariable.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/impl/localvar/SharedVariable.java @@ -1,14 +1,19 @@ package io.codelaser.maddi.modification.link.impl.localvar; import java.util.ArrayList; +import java.util.HashMap; import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.concurrent.atomic.LongAdder; +import java.util.function.Function; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.cst.impl.variable.LocalVariableImpl; +import io.codelaser.maddi.modification.link.impl.Gate; import io.codelaser.maddi.modification.link.impl.LinkVariable; public class SharedVariable extends LocalVariableImpl implements LinkVariable { @@ -35,10 +40,10 @@ public class SharedVariable extends LocalVariableImpl implements LinkVariable { * state. {@link io.codelaser.maddi.modification.link.impl.LinkComputerImpl}'s VL2O tier counters are the * same idiom. */ - private static final java.util.concurrent.atomic.LongAdder ASSIGNMENT_SOURCE_COMPUTATIONS = - new java.util.concurrent.atomic.LongAdder(); - private static final java.util.concurrent.atomic.LongAdder FORWARD_ASSIGNMENT_REBUILDS = - new java.util.concurrent.atomic.LongAdder(); + private static final LongAdder ASSIGNMENT_SOURCE_COMPUTATIONS = + new LongAdder(); + private static final LongAdder FORWARD_ASSIGNMENT_REBUILDS = + new LongAdder(); public static void resetCoreLoopCounters() { ASSIGNMENT_SOURCE_COMPUTATIONS.reset(); @@ -72,8 +77,8 @@ SharedVariables points the rep at the Data of the state it installs (SharedVaria public static final class Data { private final Set variables; private final List assignments; - private final java.util.Map> assignmentSourcesCache = new java.util.HashMap<>(); - private java.util.Map> forwardAssignments; + private final Map> assignmentSourcesCache = new HashMap<>(); + private Map> forwardAssignments; public Data() { this(new LinkedHashSet<>(), new ArrayList<>()); @@ -146,7 +151,7 @@ public SharedVariable(String name, ParameterizedType parameterizedType, Runtime * ▶ AN A/B ONLY PRICES WHAT IT ACTUALLY REMOVES. The get/put form allocates nothing on a hit. */ public Set assignmentSources(Variable variable, - java.util.function.Function> compute) { + Function> compute) { Set cached = data.assignmentSourcesCache.get(variable); if (cached != null) return cached; ASSIGNMENT_SOURCE_COMPUTATIONS.increment(); @@ -156,10 +161,10 @@ public Set assignmentSources(Variable variable, } /** The forward adjacency of {@link #assignments}, shared by every query against this group. */ - public java.util.Map> forwardAssignments() { + public Map> forwardAssignments() { if (data.forwardAssignments == null) { FORWARD_ASSIGNMENT_REBUILDS.increment(); - java.util.Map> fwd = new java.util.HashMap<>(); + Map> fwd = new HashMap<>(); for (Assignment a : data.assignments) { fwd.computeIfAbsent(a.from(), k -> new ArrayList<>()).add(a.to()); } @@ -231,7 +236,7 @@ and root together. Their relation was recorded through the leaving member ('r (CodeLaser/maddi-mod#72, 4a). So bridge it: every 'x ← variable' and 'variable ← y' leave 'x ← y', at the index where x was assigned. Gate NOBRIDGE: drop the assignments, as before. */ - private static final boolean NO_BRIDGE = io.codelaser.maddi.modification.link.impl.Gate.isSet("NOBRIDGE"); + private static final boolean NO_BRIDGE = Gate.isSet("NOBRIDGE"); public void remove(Variable variable) { data.variables.remove(variable); diff --git a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/io/LinkCodec.java b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/io/LinkCodec.java index 09f943a62..984201635 100644 --- a/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/io/LinkCodec.java +++ b/maddi-modification-link/src/main/java/io/codelaser/maddi/modification/link/io/LinkCodec.java @@ -32,7 +32,9 @@ import io.codelaser.maddi.modification.link.impl.Result; import io.codelaser.maddi.modification.link.impl.localvar.AppliedFunctionalInterfaceVariable; import io.codelaser.maddi.modification.link.impl.localvar.FunctionalInterfaceVariable; +import io.codelaser.maddi.modification.link.impl.localvar.IntermediateVariable; import io.codelaser.maddi.modification.link.impl.localvar.MarkerVariable; +import io.codelaser.maddi.modification.link.impl.localvar.SharedVariable; import io.codelaser.maddi.modification.link.vf.VirtualFieldComputer; import io.codelaser.maddi.modification.prepwork.Util; import io.codelaser.maddi.modification.prepwork.variable.Links; @@ -214,8 +216,8 @@ public EncodedValue encodeVariable(Context context, Variable variable) { // SharedVariable/IntermediateVariable have no codec branch by design: they are kept out of // summaries by acceptForLinkedVariables filtering. If one leaks here, the fallback would // silently encode it as an ordinary local — fail at the cause instead. - assert !(variable instanceof io.codelaser.maddi.modification.link.impl.localvar.SharedVariable) - && !(variable instanceof io.codelaser.maddi.modification.link.impl.localvar.IntermediateVariable) + assert !(variable instanceof SharedVariable) + && !(variable instanceof IntermediateVariable) : "engine-internal variable leaked into persistence: " + variable; return super.encodeVariable(context, variable); } @@ -238,9 +240,9 @@ public Result decodeResult(Context context, EncodedValue encodedValue) { .map(ev -> (MethodInfo) decodeInfoOutOfContext(context, ev)) .collect(Collectors.toUnmodifiableSet()))); // optional 4th element (#25): the deep-only subset of the modified variables; absent in older files - Set deepOnly = list.size() <= 3 ? new java.util.HashSet<>() + Set deepOnly = list.size() <= 3 ? new HashSet<>() : decodeList(context, list.get(3)).stream().map(ev -> decodeVariable(context, ev)) - .filter(modified::containsKey).collect(Collectors.toCollection(java.util.HashSet::new)); + .filter(modified::containsKey).collect(Collectors.toCollection(HashSet::new)); return new Result(links, new LinkedVariablesImpl(extra), modified, deepOnly, List.of(), Map.of(), Set.of(), Set.of()); } diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestAdapterChainGrowth.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestAdapterChainGrowth.java index f82019c03..bd4c2bec8 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestAdapterChainGrowth.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestAdapterChainGrowth.java @@ -29,6 +29,7 @@ import io.codelaser.maddi.modification.link.CommonTest; import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; +import io.codelaser.maddi.modification.prepwork.Util; import io.codelaser.maddi.modification.prepwork.variable.MethodLinkedVariables; /** @@ -184,8 +185,8 @@ public void test() { int r = round; mlv.ofReturnValue().forEach(link -> assertTrue( !link.from().equals(link.to()) - && !io.codelaser.maddi.modification.prepwork.Util.scopeVariables(link.to()).contains(link.from()) - && !io.codelaser.maddi.modification.prepwork.Util.scopeVariables(link.from()).contains(link.to()), + && !Util.scopeVariables(link.to()).contains(link.from()) + && !Util.scopeVariables(link.from()).contains(link.to()), "round " + r + ": self-field link " + link)); // and the two alternatives both survive: rv may be the argument, or hold it assertTrue(s.contains("wrapList←Λ0:iterable"), "rv may be the argument: " + s); diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestConcurrentMethodCallWrite.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestConcurrentMethodCallWrite.java index eaad961e7..5147931b2 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestConcurrentMethodCallWrite.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestConcurrentMethodCallWrite.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.CyclicBarrier; +import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; @@ -83,7 +84,7 @@ public void test() throws Exception { for (Future future : futures) { try { future.get(); - } catch (java.util.concurrent.ExecutionException e) { + } catch (ExecutionException e) { failures.add(e.getCause()); } } diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestMediatedLinks.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestMediatedLinks.java index 69a638bed..8b82db1e5 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestMediatedLinks.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/TestMediatedLinks.java @@ -17,6 +17,7 @@ import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.variable.Link; +import io.codelaser.maddi.modification.prepwork.variable.Stage; import io.codelaser.maddi.modification.prepwork.variable.VariableData; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; @@ -146,7 +147,7 @@ private Link returnToParameterLink(String fqn, String input) { .orElseThrow(() -> { var lastVd = VariableDataImpl.of(m.methodBody().statements().getLast()); StringBuilder sb = new StringBuilder(); - lastVd.variableInfoIterable(io.codelaser.maddi.modification.prepwork.variable.Stage.MERGE) + lastVd.variableInfoIterable(Stage.MERGE) .forEach(vi -> sb.append(vi.variable().simpleName()).append("=") .append(vi.linkedVariables()).append("; ")); return new AssertionError("expected a return<-0:o summary link; mlv=" + mlv @@ -163,7 +164,7 @@ private List mediatedPairLinks(TypeInfo typeInfo, int statementIndex) { VariableData vd = VariableDataImpl.of(m.methodBody().statements().get(statementIndex)); List allLinks = StreamSupport.stream(vd.variableInfoIterable( - io.codelaser.maddi.modification.prepwork.variable.Stage.EVALUATION).spliterator(), false) + Stage.EVALUATION).spliterator(), false) .flatMap(vi -> vi.linkedVariables() == null ? Stream.of() : vi.linkedVariables().stream()) .toList(); diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestClosureWitnessIndex.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestClosureWitnessIndex.java index ef3f86a50..3aadf6c43 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestClosureWitnessIndex.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestClosureWitnessIndex.java @@ -2,6 +2,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; +import java.util.Comparator; + import org.junit.jupiter.api.Test; import io.codelaser.maddi.modification.link.impl.LinkNatureImpl; @@ -11,7 +13,7 @@ public class TestClosureWitnessIndex { @Test public void test() { - WitnessIndex witnessIndex = new WitnessIndex<>(LinkNature::score, java.util.Comparator.comparing(Object::toString)); + WitnessIndex witnessIndex = new WitnessIndex<>(LinkNature::score, Comparator.comparing(Object::toString)); Closure closure = new Closure<>(LinkNature::best); closure.add("a", "b", LinkNatureImpl.IS_ELEMENT_OF); assertEquals("a ∈ b \n", closure.print(Object::toString, String::compareTo, witnessIndex)); diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestEngineDeterminism.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestEngineDeterminism.java index e5c21e67e..0c14dc1f6 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestEngineDeterminism.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/impl/graph/TestEngineDeterminism.java @@ -9,6 +9,7 @@ import java.util.Set; import java.util.TreeSet; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -110,7 +111,7 @@ public void twoLevelComposition() { String facts = factsOf(build(perm).printClosure()); if (reference == null) { reference = facts; - org.junit.jupiter.api.Assertions.assertTrue(facts.contains("m ∩ copy"), + Assertions.assertTrue(facts.contains("m ∩ copy"), "the two-level composite must derive:\n" + facts); } else { assertEquals(reference, facts, "insertion order changed the fact set: " + perm); diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkCollectionMutators.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkCollectionMutators.java index 1c0d19dde..337f4d0a4 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkCollectionMutators.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkCollectionMutators.java @@ -59,6 +59,7 @@ import java.util.Vector; import java.util.WeakHashMap; import java.util.function.Supplier; +import java.util.stream.Collectors; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -228,7 +229,7 @@ private static Method implemented(Class c, Method m) { private static String signature(Method m) { return m.getName() + Arrays.stream(m.getParameterTypes()).map(Class::getTypeName) - .collect(java.util.stream.Collectors.joining(",", "(", ")")); + .collect(Collectors.joining(",", "(", ")")); } private static MethodInfo find(JavaInspector javaInspector, Method m) { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkCollectionViews.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkCollectionViews.java index 167b7e9c6..d732222bc 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkCollectionViews.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkCollectionViews.java @@ -26,9 +26,12 @@ import java.lang.reflect.Constructor; import java.lang.reflect.Executable; import java.lang.reflect.Method; +import java.lang.reflect.Modifier; import java.util.*; +import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; +import java.util.stream.Collectors; import org.junit.jupiter.api.Test; @@ -262,7 +265,7 @@ private static Case receiver(Method method, Class type, Function> source, Function, Object> call) { Class iteratorType = method.getReturnType(); - int parameter = java.lang.reflect.Modifier.isStatic(method.getModifiers()) ? 0 : -1; + int parameter = Modifier.isStatic(method.getModifiers()) ? 0 : -1; Supplier level = () -> { Collection s = source.get(); Object first = advance(call.apply(s)); @@ -271,7 +274,7 @@ private static Case iterator(Method method, Supplier> Supplier> through = () -> { Set names = new TreeSet<>(); for (Method m : iteratorType.getMethods()) { - if (java.lang.reflect.Modifier.isStatic(m.getModifiers()) || m.getDeclaringClass() == Object.class) continue; + if (Modifier.isStatic(m.getModifiers()) || m.getDeclaringClass() == Object.class) continue; Collection s = source.get(); Object it = call.apply(s); advance(it); @@ -295,7 +298,7 @@ private static Object advance(Object iterator) { private static Object iteratorArgument(Class type) { if (type == int.class) return 0; - if (type == java.util.function.Consumer.class) return (java.util.function.Consumer) _ -> { + if (type == Consumer.class) return (Consumer) _ -> { }; return new StringBuilder("x"); } @@ -421,7 +424,7 @@ private static Object construct(Executable executable, Object[] args) { private static String label(Executable e) { String name = e instanceof Constructor ? "" : e.getName(); return e.getDeclaringClass().getSimpleName() + "." + name + Arrays.stream(e.getParameterTypes()) - .map(Class::getSimpleName).collect(java.util.stream.Collectors.joining(",", "(", ")")); + .map(Class::getSimpleName).collect(Collectors.joining(",", "(", ")")); } private static MethodInfo find(JavaInspector javaInspector, Executable e) { diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkReadOnlyTypes.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkReadOnlyTypes.java index 0a4fe0e32..0fdd478f1 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkReadOnlyTypes.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestJdkReadOnlyTypes.java @@ -30,6 +30,7 @@ import java.net.URI; import java.nio.Buffer; import java.nio.ByteBuffer; +import java.nio.ByteOrder; import java.nio.CharBuffer; import java.nio.DoubleBuffer; import java.nio.FloatBuffer; @@ -37,6 +38,7 @@ import java.nio.LongBuffer; import java.nio.ReadOnlyBufferException; import java.nio.ShortBuffer; +import java.nio.charset.StandardCharsets; import java.nio.file.FileSystem; import java.nio.file.FileSystems; import java.nio.file.Files; @@ -238,7 +240,7 @@ private static boolean isPublicChain(Class c) { } private static boolean contains(byte[] bytes, String text) { - byte[] wanted = text.getBytes(java.nio.charset.StandardCharsets.UTF_8); + byte[] wanted = text.getBytes(StandardCharsets.UTF_8); outer: for (int i = 0; i <= bytes.length - wanted.length; i++) { for (int j = 0; j < wanted.length; j++) { @@ -289,7 +291,7 @@ private static Object argument(Class type) { if (type == LongBuffer.class) return LongBuffer.allocate(1); if (type == FloatBuffer.class) return FloatBuffer.allocate(1); if (type == DoubleBuffer.class) return DoubleBuffer.allocate(1); - if (type == java.nio.ByteOrder.class) return java.nio.ByteOrder.BIG_ENDIAN; + if (type == ByteOrder.class) return ByteOrder.BIG_ENDIAN; return null; } diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestLoadAnalyzedPackageFiles.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestLoadAnalyzedPackageFiles.java index 11aeb6434..e01b00ad8 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestLoadAnalyzedPackageFiles.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/io/TestLoadAnalyzedPackageFiles.java @@ -35,6 +35,7 @@ import org.slf4j.LoggerFactory; import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; @@ -47,9 +48,9 @@ public class TestLoadAnalyzedPackageFiles { @BeforeAll public static void beforeAll() { - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)).setLevel(Level.INFO); - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger("io.codelaser.maddi.shallow")).setLevel(Level.DEBUG); - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger("io.codelaser.maddi.modification")).setLevel(Level.DEBUG); + ((Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)).setLevel(Level.INFO); + ((Logger) LoggerFactory.getLogger("io.codelaser.maddi.shallow")).setLevel(Level.DEBUG); + ((Logger) LoggerFactory.getLogger("io.codelaser.maddi.modification")).setLevel(Level.DEBUG); } @Test diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/CommonKotlinLinkTest.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/CommonKotlinLinkTest.java index 04f5def30..6e98cb8af 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/CommonKotlinLinkTest.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/CommonKotlinLinkTest.java @@ -2,6 +2,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; +import java.io.File; import java.io.IOException; import java.io.UncheckedIOException; import java.nio.file.Files; @@ -134,7 +135,7 @@ protected static Parsed link(String kotlin, String java) { */ private static SourceSet kotlinStdlib() { String cp = System.getProperty("java.class.path", ""); - Path jar = Stream.of(cp.split(java.io.File.pathSeparator)).map(Path::of) + Path jar = Stream.of(cp.split(File.pathSeparator)).map(Path::of) .filter(p -> p.getFileName().toString().matches("kotlin-stdlib-\\d[^-]*\\.jar")) .findFirst() .orElseThrow(() -> new AssertionError("no kotlin-stdlib jar on the test class path: " + cp)); diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkFunctions.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkFunctions.java index e4477130e..de3ba0a0a 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkFunctions.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/kotlin/TestKotlinLinkFunctions.java @@ -2,10 +2,15 @@ import static org.junit.jupiter.api.Assertions.assertEquals; +import java.util.ArrayList; +import java.util.List; + import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import io.codelaser.maddi.cst.api.expression.Lambda; + /* Function types and lambdas. A Kotlin function type is kotlin.jvm.functions.FunctionN: the Java twins that take a Function1 or a java.util.function type link exactly as Kotlin does (CodeLaser/maddi-mod#13). What Kotlin's @@ -141,9 +146,9 @@ Function1 lifts as a Consumer (CodeLaser/maddi#94). `captured` links as the Java */ @Test public void kotlinForEachIsContracted() { - java.util.List lambdaLinks = new java.util.ArrayList<>(); + List lambdaLinks = new ArrayList<>(); p.kotlin("captured").methodBody().visit(e -> { - if (e instanceof io.codelaser.maddi.cst.api.expression.Lambda l) lambdaLinks.add(p.links(l.methodInfo())); + if (e instanceof Lambda l) lambdaLinks.add(p.links(l.methodInfo())); return true; }); assertEquals("[[0:it.§m≡r*.element.§m,0:it→r*.element] --> -]", lambdaLinks.toString()); diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldComputer.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldComputer.java index 1169ae0a4..cfab9e419 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldComputer.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldComputer.java @@ -83,10 +83,10 @@ public void test3() { public void listIterator() { VirtualFieldComputer vfc = new VirtualFieldComputer(javaInspector); - TypeInfo iterator = javaInspector.compiledTypesManager().type(java.util.Iterator.class); + TypeInfo iterator = javaInspector.compiledTypesManager().type(Iterator.class); assertEquals("§m - E[] §es", vfc.compute(iterator).toString()); // next() and previous() return one E; computed from the methods alone, that read multiplicity 1, a single §e - TypeInfo listIterator = javaInspector.compiledTypesManager().type(java.util.ListIterator.class); + TypeInfo listIterator = javaInspector.compiledTypesManager().type(ListIterator.class); assertEquals(2, vfc.maxMultiplicityFromMethods(listIterator)); assertEquals("§m - E[] §es", vfc.compute(listIterator).toString()); } diff --git a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldComputer3.java b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldComputer3.java index dc39369b4..60503b80b 100644 --- a/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldComputer3.java +++ b/maddi-modification-link/src/test/java/io/codelaser/maddi/modification/link/vf/TestVirtualFieldComputer3.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Function; import java.util.stream.Collectors; import org.intellij.lang.annotations.Language; @@ -104,7 +105,7 @@ public void functionalInterfaceOutsideJavaUtilFunction() { @Test public void needsVirtualFunctionInJavaUtilFunction() { VirtualFieldComputer vfc = new VirtualFieldComputer(javaInspector); - TypeInfo function = javaInspector.compiledTypesManager().type(java.util.function.Function.class); + TypeInfo function = javaInspector.compiledTypesManager().type(Function.class); assertEquals(VirtualFields.NONE, vfc.compute(function)); assertFalse(Util.needsVirtual(function.asParameterizedType())); } @@ -114,7 +115,7 @@ public void needsVirtualFunctionInJavaUtilFunction() { public void functionalInterfaceInJavaUtilFunction() { VirtualFieldComputer vfc = new VirtualFieldComputer(javaInspector); TypeInfo function = javaInspector.compiledTypesManager() - .type(java.util.function.Function.class); + .type(Function.class); assertEquals(VirtualFields.NONE, vfc.compute(function)); } diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/MethodAnalyzer.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/MethodAnalyzer.java index 149045e6b..eb983560f 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/MethodAnalyzer.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/MethodAnalyzer.java @@ -135,7 +135,7 @@ private void observeGetSet(MethodInfo callee, Value.FieldValue getSet) { /** Start collecting for a primary type; false when a collection is already open (a nested doType). */ boolean startGetSetAssumptions() { if (getSetAssumptions.get() != null) return false; - getSetAssumptions.set(new java.util.HashMap<>()); + getSetAssumptions.set(new HashMap<>()); return true; } diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/PrepAnalyzer.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/PrepAnalyzer.java index e36a814f9..1218cfc2b 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/PrepAnalyzer.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/PrepAnalyzer.java @@ -20,11 +20,14 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Consumer; import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -35,14 +38,22 @@ import io.codelaser.maddi.callgraph.CallGraphContributions; import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.callgraph.ComputeCallGraph; +import io.codelaser.maddi.cst.api.analysis.Codec; import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.Value; +import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.element.ModuleInfo; +import io.codelaser.maddi.cst.api.expression.ConstructorCall; +import io.codelaser.maddi.cst.api.expression.InstanceOf; +import io.codelaser.maddi.cst.api.expression.Lambda; import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.InfoMapView; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.runtime.Runtime; import io.codelaser.maddi.cst.api.statement.Block; +import io.codelaser.maddi.cst.api.statement.LocalTypeDeclaration; +import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.graph.G; @@ -114,14 +125,14 @@ public boolean isDefault() { } @Override - public io.codelaser.maddi.cst.api.analysis.Codec.EncodedValue encode( - io.codelaser.maddi.cst.api.analysis.Codec codec, io.codelaser.maddi.cst.api.analysis.Codec.Context context) { + public Codec.EncodedValue encode( + Codec codec, Codec.Context context) { return null; // not streamed } @Override - public Value rewire(io.codelaser.maddi.cst.api.info.InfoMapView infoMap) { - Map map = new java.util.HashMap<>(); + public Value rewire(InfoMapView infoMap) { + Map map = new HashMap<>(); boolean lost = unresolved; for (Map.Entry e : statusByCallee.entrySet()) { MethodInfo rewired; @@ -147,7 +158,7 @@ public String toString() { && p.analysisTier() == Property.AnalysisTier.INTRINSIC; // the primary types doType skipped because they arrived prepped, in this run; see doPrimaryTypesReturnComputeCallGraph - private final Set skipped = java.util.concurrent.ConcurrentHashMap.newKeySet(); + private final Set skipped = ConcurrentHashMap.newKeySet(); // of the last doPrimaryTypesReturnComputeCallGraph; see typesPrepped() private int typesPrepped; private int typesCarried; @@ -400,7 +411,7 @@ private static void clearType(TypeInfo typeInfo) { // every constructor and method of the type, its nested types, and the anonymous, lambda and local types // declared in their bodies and field initializers, recursively - private static void forEachMethod(TypeInfo typeInfo, java.util.function.Consumer consumer) { + private static void forEachMethod(TypeInfo typeInfo, Consumer consumer) { typeInfo.recursiveSubTypeStream().forEach(type -> { type.constructorAndMethodStream().forEach(mi -> { consumer.accept(mi); @@ -412,18 +423,18 @@ private static void forEachMethod(TypeInfo typeInfo, java.util.function.Consumer }); } - private static void forEachMethodInBody(io.codelaser.maddi.cst.api.element.Element root, - java.util.function.Consumer consumer) { + private static void forEachMethodInBody(Element root, + Consumer consumer) { root.visit(e -> { - if (e instanceof io.codelaser.maddi.cst.api.expression.ConstructorCall cc && cc.anonymousClass() != null) { + if (e instanceof ConstructorCall cc && cc.anonymousClass() != null) { forEachMethod(cc.anonymousClass(), consumer); return false; } - if (e instanceof io.codelaser.maddi.cst.api.expression.Lambda lambda) { + if (e instanceof Lambda lambda) { forEachMethod(lambda.methodInfo().typeInfo(), consumer); return false; } - if (e instanceof io.codelaser.maddi.cst.api.statement.LocalTypeDeclaration ltd) { + if (e instanceof LocalTypeDeclaration ltd) { forEachMethod(ltd.typeInfo(), consumer); return false; } @@ -431,17 +442,17 @@ private static void forEachMethodInBody(io.codelaser.maddi.cst.api.element.Eleme }); } - private static void clearElements(io.codelaser.maddi.cst.api.element.Element root) { + private static void clearElements(Element root) { root.visit(e -> { - if (e instanceof io.codelaser.maddi.cst.api.statement.Statement - || e instanceof io.codelaser.maddi.cst.api.expression.InstanceOf) { + if (e instanceof Statement + || e instanceof InstanceOf) { e.analysis().removeIf(CARRIED_PREP); } - if (e instanceof io.codelaser.maddi.cst.api.expression.ConstructorCall cc && cc.anonymousClass() != null) { + if (e instanceof ConstructorCall cc && cc.anonymousClass() != null) { cc.anonymousClass().recursiveSubTypeStream().forEach(PrepAnalyzer::clearType); - } else if (e instanceof io.codelaser.maddi.cst.api.expression.Lambda lambda) { + } else if (e instanceof Lambda lambda) { clearType(lambda.methodInfo().typeInfo()); - } else if (e instanceof io.codelaser.maddi.cst.api.statement.LocalTypeDeclaration ltd) { + } else if (e instanceof LocalTypeDeclaration ltd) { ltd.typeInfo().recursiveSubTypeStream().forEach(PrepAnalyzer::clearType); } return true; @@ -508,11 +519,11 @@ void doType(TypeInfo typeInfo) { // degradation marker (task #36): the whole type's methods lack prep data; per-call // consumers (VL2O) must treat them pessimistically typeInfo.recursiveSubTypeStream() - .flatMap(io.codelaser.maddi.cst.api.info.TypeInfo::constructorAndMethodStream) + .flatMap(TypeInfo::constructorAndMethodStream) .forEach(mi -> { mi.analysis().getOrCreate( - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.DEGRADED_ANALYSIS_METHOD, - () -> io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.TRUE); + PropertyImpl.DEGRADED_ANALYSIS_METHOD, + () -> ValueImpl.BoolImpl.TRUE); }); exceptions.add(new AnalyzerException(typeInfo, t)); } else { diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/Util.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/Util.java index 7dd0572c6..10cba5de9 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/Util.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/Util.java @@ -27,7 +27,9 @@ import org.jetbrains.annotations.NotNull; +import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.expression.IntConstant; +import io.codelaser.maddi.cst.api.expression.Lambda; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; @@ -260,13 +262,13 @@ private static MethodInfo lambdaContainer(MethodInfo lambdaMethod) { return found == null ? source : found; } - private static MethodInfo lambdaContainer(io.codelaser.maddi.cst.api.element.Element root, + private static MethodInfo lambdaContainer(Element root, MethodInfo lambdaMethod, MethodInfo current) { MethodInfo[] found = {null}; root.visit(e -> { if (found[0] != null) return false; - if (e instanceof io.codelaser.maddi.cst.api.expression.Lambda lambda) { + if (e instanceof Lambda lambda) { if (lambda.methodInfo() == lambdaMethod) { found[0] = current; } else if (lambda.methodInfo().methodBody() != null) { diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/DecoratorImpl.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/DecoratorImpl.java index e21a887eb..e973184c0 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/DecoratorImpl.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/DecoratorImpl.java @@ -218,7 +218,7 @@ protected List annotationAndProperties(Element infoIn) { propertyUnmodified = !methodInfo.isConstructor() && analysis.getOrDefault(NON_MODIFYING_METHOD, FALSE).isTrue() ? NON_MODIFYING_METHOD : null; modifiedHcOnly = propertyUnmodified == null && !methodInfo.isConstructor() && analysis.getOrDefault( - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.STRUCTURALLY_NON_MODIFYING_METHOD, FALSE).isTrue(); + PropertyImpl.STRUCTURALLY_NON_MODIFYING_METHOD, FALSE).isTrue(); // a "hidden content only" modification is a positive verdict, printed like @NotModified is if ((explicit || modifiedHcOnly) && !methodInfo.isConstructor() && propertyUnmodified == null) { propertyModifiedAnnotated = NON_MODIFYING_METHOD; @@ -262,7 +262,7 @@ protected List annotationAndProperties(Element infoIn) { propertyUnmodified = !pi.parameterizedType().isPrimitiveStringClass() && isUnmodified ? UNMODIFIED_PARAMETER : null; modifiedHcOnly = !isUnmodified && analysis.getOrDefault( - io.codelaser.maddi.cst.impl.analysis.PropertyImpl.STRUCTURALLY_UNMODIFIED_PARAMETER, FALSE).isTrue(); + PropertyImpl.STRUCTURALLY_UNMODIFIED_PARAMETER, FALSE).isTrue(); propertyModifiedAnnotated = !pi.parameterizedType().isPrimitiveStringClass() && !isUnmodified && (explicit || modifiedHcOnly || isAnnotated(pi, UNMODIFIED_PARAMETER)) @@ -484,7 +484,7 @@ protected List annotationAndProperties(Element infoIn) { // task #42: name the cast targets — actionable for the caller (an argument that is // none of these types is not modified by this method) List targets = downcastValue.variableToTypeInfoSet().values().stream() - .flatMap(java.util.Set::stream) + .flatMap(Set::stream) .map(TypeInfo::fullyQualifiedName) .distinct().sorted() .map(fqn -> (Expression) runtime.newStringConstant(fqn)) diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/IncrementalState.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/IncrementalState.java index 706f98c3d..e8e3cf71b 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/IncrementalState.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/IncrementalState.java @@ -25,6 +25,8 @@ import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -161,11 +163,11 @@ public static IncrementalState load(File directory) { parseStringMap(json.substring(0, src < 0 ? (cs < 0 ? json.length() : cs) : src), fingerprints); if (src >= 0) parseStringMap(json.substring(src, cs < 0 ? json.length() : cs), sourceFps); if (cs >= 0) { - java.util.regex.Matcher c = java.util.regex.Pattern + Matcher c = Pattern .compile("\"([^\"]+)\":\\s*\\[([^]]*)]").matcher(json.substring(cs)); while (c.find()) { Set set = new TreeSet<>(); - java.util.regex.Matcher e = java.util.regex.Pattern + Matcher e = Pattern .compile("\"([^\"]+)\"").matcher(c.group(2)); while (e.find()) set.add(e.group(1)); consumers.put(c.group(1), set); @@ -181,7 +183,7 @@ public static IncrementalState load(File directory) { } private static void parseStringMap(String part, Map target) { - java.util.regex.Matcher m = java.util.regex.Pattern + Matcher m = Pattern .compile("\"([^\"]+)\":\\s*\"([^\"]*)\"").matcher(part); while (m.find()) target.put(m.group(1), m.group(2)); } diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/LoadAnalysisResults.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/LoadAnalysisResults.java index e6fabd67f..d698f4d20 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/LoadAnalysisResults.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/LoadAnalysisResults.java @@ -24,6 +24,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.function.Predicate; import java.util.function.Supplier; import java.util.jar.JarEntry; import java.util.jar.JarInputStream; @@ -80,7 +81,7 @@ public class LoadAnalysisResults { // methodLinks, ...) the prepwork codec has no decoder for, and a few whose decoding needs types still being // loaded (downcastParameter); a consumer that only wants the published verdicts -- ComposeAnalysisHints, which // writes hint sources from a source run -- restricts the load to those. - private java.util.function.Predicate propertyKeyFilter = _ -> true; + private Predicate propertyKeyFilter = _ -> true; public LoadAnalysisResults(Runtime runtime, SourceSet sourceSetOfRequest) { this.runtime = runtime; @@ -88,7 +89,7 @@ public LoadAnalysisResults(Runtime runtime, SourceSet sourceSetOfRequest) { } /** Decode only the properties whose key passes {@code filter}; the rest of each results file is skipped. */ - public LoadAnalysisResults setPropertyKeyFilter(java.util.function.Predicate filter) { + public LoadAnalysisResults setPropertyKeyFilter(Predicate filter) { this.propertyKeyFilter = Objects.requireNonNull(filter); return this; } @@ -470,7 +471,7 @@ private boolean processSub(Codec codec, Codec.Context context, JSONObject jo, bo } private static void processData(Codec codec, Codec.Context context, Info info, JSONObject dataJo, - java.util.function.Predicate keyFilter) { + Predicate keyFilter) { List epvs = new ArrayList<>(); for (int i = 1; i < dataJo.size(); i += 2) { if (dataJo.get(i) instanceof KeyValuePair kvp2) { diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/NullabilityDecorator.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/NullabilityDecorator.java index f40c4d831..66ae14bd4 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/NullabilityDecorator.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/NullabilityDecorator.java @@ -194,7 +194,7 @@ private boolean unmarkedPosition(Element element) { // in the @NullMarked style, a method with an undecided parameter or return (not a type variable: parametric) private boolean unmarked(MethodInfo mi) { if (options.writeNonNull || nullUnmarkedAnnotation == null) return false; - return java.util.stream.Stream.concat(mi.parameters().stream(), Stream.of(mi)) + return Stream.concat(mi.parameters().stream(), Stream.of(mi)) .anyMatch(e -> state(e) == NullableState.UNSPECIFIED && !isTypeVariable(type(e))); } diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/WriteAnalysisResults.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/WriteAnalysisResults.java index f79ad88ce..f62a4c9d4 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/WriteAnalysisResults.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/io/WriteAnalysisResults.java @@ -37,6 +37,7 @@ import io.codelaser.maddi.cst.api.analysis.Codec; import io.codelaser.maddi.cst.api.analysis.Property; +import io.codelaser.maddi.cst.api.analysis.PropertyValueMap; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.*; @@ -106,7 +107,7 @@ public WriteAnalysisResults setExplicitFalse(Set properties) { return this; } - private boolean writeFalseExplicitly(Info info, io.codelaser.maddi.cst.api.analysis.PropertyValueMap.PropertyValue pv) { + private boolean writeFalseExplicitly(Info info, PropertyValueMap.PropertyValue pv) { return !explicitFalse.isEmpty() && explicitFalse.contains(pv.property()) && pv.value() instanceof Value.Bool b && b.isFalse(); @@ -237,7 +238,7 @@ private void write(File directory, Codec codec, String[] packageParts, List pass = link.linkNature().pass(); + Set pass = link.linkNature().pass(); if (pass == null || pass.isEmpty()) { natureEv = codec.encodeString(context, link.linkNature().toString()); } else { - List natureList = new java.util.ArrayList<>(); + List natureList = new ArrayList<>(); natureList.add(codec.encodeString(context, link.linkNature().toString())); pass.stream() - .sorted(java.util.Comparator.comparing( - io.codelaser.maddi.cst.api.info.MethodInfo::fullyQualifiedName)) + .sorted(Comparator.comparing( + MethodInfo::fullyQualifiedName)) .forEach(mi -> natureList.add(codec.encodeMethodInfo(context, mi))); natureEv = codec.encodeList(context, natureList); } - List parts = new java.util.ArrayList<>(List.of( + List parts = new ArrayList<>(List.of( codec.encodeVariable(context, link.from()), natureEv, codec.encodeVariable(context, link.to()) @@ -149,7 +150,7 @@ public int hashCode() { * back to the lexicographically smaller rendering. */ @Override - public boolean strictlyRicherThan(io.codelaser.maddi.cst.api.analysis.Value other) { + public boolean strictlyRicherThan(Value other) { if (!(other instanceof LinksImpl o)) return false; int c = Integer.compare(linkSet.size(), o.linkSet.size()); if (c != 0) return c > 0; diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableDataImpl.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableDataImpl.java index 770404f43..1d2222657 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableDataImpl.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableDataImpl.java @@ -22,6 +22,7 @@ import java.util.LinkedHashSet; import java.util.SequencedMap; import java.util.Set; +import java.util.function.Predicate; import java.util.stream.Stream; import io.codelaser.maddi.cst.api.analysis.Codec; @@ -157,7 +158,7 @@ public VariableInfoContainer variableInfoContainerOrNull(String fullyQualifiedNa } /** {@link VariableInfoContainerImpl#clearDerived} on every container. */ - public void clearDerived(java.util.function.Predicate derived) { + public void clearDerived(Predicate derived) { vicByFqn.values().forEach(vic -> { if (vic instanceof VariableInfoContainerImpl impl) impl.clearDerived(derived); }); diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableInfoContainerImpl.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableInfoContainerImpl.java index 16588c276..e7db64cd9 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableInfoContainerImpl.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableInfoContainerImpl.java @@ -17,6 +17,10 @@ package io.codelaser.maddi.modification.prepwork.variable.impl; +import java.util.function.Consumer; +import java.util.function.Predicate; + +import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.info.InfoMapView; import io.codelaser.maddi.cst.api.variable.Variable; import io.codelaser.maddi.modification.prepwork.variable.Stage; @@ -49,14 +53,14 @@ public VariableInfoContainerImpl(Variable variable, } /** {@link VariableInfoImpl#clearDerived} on the infos this container owns: the initial, the evaluation, the merge. */ - public void clearDerived(java.util.function.Predicate derived) { + public void clearDerived(Predicate derived) { if (previousOrInitial.isRight()) previousOrInitial.getRight().clearDerived(derived); if (evaluation != null) evaluation.clearDerived(derived); if (merge != null && merge.isSet()) merge.get().clearDerived(derived); } /** The infos this container owns, as {@link #clearDerived} visits them: the initial, the evaluation, the merge. */ - public void forEachOwnInfo(java.util.function.Consumer consumer) { + public void forEachOwnInfo(Consumer consumer) { if (previousOrInitial.isRight()) consumer.accept(previousOrInitial.getRight()); if (evaluation != null) consumer.accept(evaluation); if (merge != null && merge.isSet()) consumer.accept(merge.get()); diff --git a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableInfoImpl.java b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableInfoImpl.java index 2b2c0b476..f0e1a03fe 100644 --- a/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableInfoImpl.java +++ b/maddi-modification-prepwork/src/main/java/io/codelaser/maddi/modification/prepwork/variable/impl/VariableInfoImpl.java @@ -17,10 +17,14 @@ package io.codelaser.maddi.modification.prepwork.variable.impl; +import java.util.HashSet; +import java.util.List; import java.util.Set; +import java.util.function.Predicate; import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.PropertyValueMap; +import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.info.InfoMapView; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.variable.LocalVariable; @@ -73,7 +77,7 @@ public VariableInfoImpl(Variable variable, Assignments assignments, Reads reads, * {@code setLinkedVariables} and the analysis map only move a value up, so a re-analysis on new inputs would keep * the old, stronger value. */ - public void clearDerived(java.util.function.Predicate derived) { + public void clearDerived(Predicate derived) { linkedVariables = null; analysis.removeIf(derived); } @@ -104,10 +108,10 @@ private static boolean sameContent(Links l1, Links l2) { return contentKey(l1).equals(contentKey(l2)); } - private static java.util.Set> contentKey(Links links) { - java.util.Set> set = new java.util.HashSet<>(); + private static Set> contentKey(Links links) { + Set> set = new HashSet<>(); for (Link link : links) { - set.add(java.util.List.of(link.from(), link.linkNature(), link.to(), link.mediated())); + set.add(List.of(link.from(), link.linkNature(), link.to(), link.mediated())); } return set; } @@ -174,7 +178,7 @@ public boolean isUnmodified() { @Override public boolean isStructurallyUnmodified() { - io.codelaser.maddi.cst.api.analysis.Value.Bool structural = + Value.Bool structural = analysis.getOrNull(STRUCTURALLY_UNMODIFIED_VARIABLE, ValueImpl.BoolImpl.class); return structural != null ? structural.isTrue() : isUnmodified(); } diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestAnonymousMemberRecord.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestAnonymousMemberRecord.java index 3019030ca..7d4691966 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestAnonymousMemberRecord.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestAnonymousMemberRecord.java @@ -6,7 +6,9 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import io.codelaser.maddi.cst.api.expression.ConstructorCall; import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.ReturnStatement; /** * elasticsearch first contact: a member record of an anonymous class, forward-referenced from a sibling @@ -44,8 +46,8 @@ public void test() { // the member record must be fully source-built: body present on make(), Cmp under the anonymous type var make = X.findUniqueMethod("make", 0); assertNotNull(make.methodBody(), "make()'s body must survive the member-record parse"); - var rs = (io.codelaser.maddi.cst.api.statement.ReturnStatement) make.methodBody().statements().getFirst(); - var cc = (io.codelaser.maddi.cst.api.expression.ConstructorCall) rs.expression(); + var rs = (ReturnStatement) make.methodBody().statements().getFirst(); + var cc = (ConstructorCall) rs.expression(); TypeInfo anon = cc.anonymousClass(); assertNotNull(anon); TypeInfo cmp = anon.findSubType("Cmp"); diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestGap151SwitchInAnonymousField.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestGap151SwitchInAnonymousField.java index 51b122d39..bf8b89eaf 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestGap151SwitchInAnonymousField.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestGap151SwitchInAnonymousField.java @@ -6,7 +6,9 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import io.codelaser.maddi.cst.api.expression.ConstructorCall; import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.ReturnStatement; import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; /** @@ -137,8 +139,8 @@ private void prep(String input) { new PrepAnalyzer(runtime).doPrimaryType(X); var make = X.findUniqueMethod("make", 3); - var rs = (io.codelaser.maddi.cst.api.statement.ReturnStatement) make.methodBody().statements().getFirst(); - var cc = (io.codelaser.maddi.cst.api.expression.ConstructorCall) rs.expression(); + var rs = (ReturnStatement) make.methodBody().statements().getFirst(); + var cc = (ConstructorCall) rs.expression(); TypeInfo anon = cc.anonymousClass(); assertNotNull(anon, "the returned Runnable is an anonymous class"); assertFalse(anon.fields().isEmpty(), "the anonymous class declares the initialized field"); diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestPrepAfterPartialReparse.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestPrepAfterPartialReparse.java index 64a94e779..24d17bb9a 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestPrepAfterPartialReparse.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/TestPrepAfterPartialReparse.java @@ -27,6 +27,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.TreeMap; import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; @@ -36,6 +37,7 @@ import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.api.variable.FieldReference; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.inspection.api.parser.ParseResult; @@ -197,13 +199,13 @@ private static ParseResult coldPrep(SourceSet set) { /* Every method's and every statement's VariableData, described (VariableDataImpl.toString), by name and index. */ private static Map prepDump(ParseResult pr) { - Map map = new java.util.TreeMap<>(); + Map map = new TreeMap<>(); for (TypeInfo type : pr.primaryTypes()) { for (MethodInfo mi : type.constructorsAndMethods()) { map.put(mi.fullyQualifiedName(), String.valueOf(mi.analysis() .getOrNull(VariableDataImpl.VARIABLE_DATA, VariableDataImpl.class))); mi.methodBody().visit(e -> { - if (e instanceof io.codelaser.maddi.cst.api.statement.Statement st) { + if (e instanceof Statement st) { map.put(mi.fullyQualifiedName() + "@" + st.source().index(), String.valueOf(st.analysis() .getOrNull(VariableDataImpl.VARIABLE_DATA, VariableDataImpl.class))); } diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestJavadocEdgeIsFiltered.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestJavadocEdgeIsFiltered.java index c0b784cf5..1ef523384 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestJavadocEdgeIsFiltered.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestJavadocEdgeIsFiltered.java @@ -20,6 +20,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; +import java.util.Set; import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; @@ -30,6 +31,7 @@ import io.codelaser.maddi.graph.G; import io.codelaser.maddi.graph.V; import io.codelaser.maddi.modification.prepwork.CommonTest; +import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; /** * A javadoc link obeys the same {@code accept()} as every other edge. {@code doJavadoc} used to merge an edge @@ -62,7 +64,7 @@ private void helper() { } @Test public void test() { TypeInfo X = javaInspector.parse(ABX, INPUT); - G graph = prepAnalyzer().doPrimaryTypesReturnGraph(java.util.Set.of(X)); + G graph = prepAnalyzer().doPrimaryTypesReturnGraph(Set.of(X)); List outOfParse = graph.vertices().stream().map(V::t) .filter(i -> i instanceof TypeInfo ti && !ABX.equals(ti.primaryType().fullyQualifiedName())) @@ -75,7 +77,7 @@ public void test() { "the class comment's {@link X} is a self-link, not an edge"); } - private io.codelaser.maddi.modification.prepwork.PrepAnalyzer prepAnalyzer() { - return new io.codelaser.maddi.modification.prepwork.PrepAnalyzer(runtime); + private PrepAnalyzer prepAnalyzer() { + return new PrepAnalyzer(runtime); } } diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestPrimaryTypeUseGraph.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestPrimaryTypeUseGraph.java index c312020c6..2b38c0d14 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestPrimaryTypeUseGraph.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/callgraph/TestPrimaryTypeUseGraph.java @@ -22,6 +22,7 @@ import static org.junit.jupiter.api.Assertions.*; import java.io.IOException; +import java.util.Collections; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @@ -135,7 +136,7 @@ public void testDisjoint() throws IOException { Set dependents = useGraph.dependentsOf(changed); // Mid uses Base, so Mid is reachable from the changed set -- but it is changed, so it must not be reported assertEquals(Set.of(top), dependents); - assertTrue(java.util.Collections.disjoint(changed, dependents)); + assertTrue(Collections.disjoint(changed, dependents)); } @DisplayName("module vertices are skipped rather than projected: ModuleInfo.typeInfo() throws") diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestAnalysisResultsFormat.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestAnalysisResultsFormat.java index 39dd407cc..939e48f7a 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestAnalysisResultsFormat.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestAnalysisResultsFormat.java @@ -6,11 +6,13 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.Set; import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.Test; import io.codelaser.maddi.cst.api.analysis.Codec; +import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; @@ -35,7 +37,7 @@ class X { private static final String MARKER = "{\"format\": \"maddi-analysis-results\", \"version\": 1}"; private Codec codec; - private io.codelaser.maddi.cst.api.element.SourceSet sourceSet; + private SourceSet sourceSet; private String write() throws IOException { TypeInfo X = javaInspector.parse(ABX, INPUT); @@ -129,7 +131,7 @@ private String writeParams(boolean explicitFalse) throws IOException { trie.add(new String[]{"a", "b"}, X); File dir = new File("build/analysis-results-format-false"); WriteAnalysisResults wa = new WriteAnalysisResults(runtime); - if (explicitFalse) wa.setExplicitFalse(java.util.Set.of(PropertyImpl.UNMODIFIED_PARAMETER)); + if (explicitFalse) wa.setExplicitFalse(Set.of(PropertyImpl.UNMODIFIED_PARAMETER)); wa.write(dir, trie, codec); return Files.readString(new File(dir, "AB.json").toPath()); } diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestModuleGatedHints.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestModuleGatedHints.java index 5dd81f1d5..5dd078ff7 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestModuleGatedHints.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/io/TestModuleGatedHints.java @@ -17,6 +17,7 @@ import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.inspection.api.resource.InputConfiguration; +import io.codelaser.maddi.inspection.openjdk.JavaInspectorImpl; import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; import io.codelaser.maddi.inspection.resource.SourceSetImpl; @@ -30,7 +31,7 @@ public class TestModuleGatedHints { private JavaInspector inspectorWithoutDesktop() throws Exception { SourceSet javaBase = SourceSetImpl.javaBase(); - JavaInspector ji = new io.codelaser.maddi.inspection.openjdk.JavaInspectorImpl(); + JavaInspector ji = new JavaInspectorImpl(); ji.preload("java.base::java.util."); // deliberately NOT preloading java.desktop / java.net.http, and NOT on the classpath below InputConfiguration ic = new InputConfigurationImpl.Builder() diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/CommonKotlinTest.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/CommonKotlinTest.java index 77dd9bf46..49c8428df 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/CommonKotlinTest.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/kotlin/CommonKotlinTest.java @@ -2,6 +2,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; +import java.io.File; import java.io.IOException; import java.io.UncheckedIOException; import java.nio.file.Files; @@ -131,7 +132,7 @@ protected static Parsed prep(boolean runPrep, String kotlin, String java, String */ private static SourceSet kotlinStdlib() { String cp = System.getProperty("java.class.path", ""); - Path jar = Stream.of(cp.split(java.io.File.pathSeparator)).map(Path::of) + Path jar = Stream.of(cp.split(File.pathSeparator)).map(Path::of) .filter(p -> p.getFileName().toString().matches("kotlin-stdlib-\\d[^-]*\\.jar")) .findFirst() .orElseThrow(() -> new AssertionError("no kotlin-stdlib jar on the test class path: " + cp)); diff --git a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestShadowedCapturedVariable.java b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestShadowedCapturedVariable.java index 7c065bc9b..22f7a1756 100644 --- a/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestShadowedCapturedVariable.java +++ b/maddi-modification-prepwork/src/test/java/io/codelaser/maddi/modification/prepwork/variable/TestShadowedCapturedVariable.java @@ -25,6 +25,7 @@ import java.io.IOException; import java.net.URISyntaxException; +import java.util.List; import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeEach; @@ -106,7 +107,7 @@ public void test() { ConstructorCall cc = (ConstructorCall) ((ReturnStatement) make.methodBody().lastStatement()).expression(); MethodInfo run = cc.anonymousClass().findUniqueMethod("run", 1); - java.util.List runStmts = run.methodBody().statements(); + List runStmts = run.methodBody().statements(); Statement builderStmt = runStmts.get(0); // StringBuilder e = new StringBuilder(env); -- reads outer IfElseStatement ifStmt = (IfElseStatement) runStmts.get(1); ForEachStatement forEach = (ForEachStatement) ifStmt.block().statements().get(0); diff --git a/maddi-run-analysis/src/main/java/io/codelaser/maddi/run/analysis/AnalysisEngineImpl.java b/maddi-run-analysis/src/main/java/io/codelaser/maddi/run/analysis/AnalysisEngineImpl.java index beab0d74b..c9cc0e8f7 100644 --- a/maddi-run-analysis/src/main/java/io/codelaser/maddi/run/analysis/AnalysisEngineImpl.java +++ b/maddi-run-analysis/src/main/java/io/codelaser/maddi/run/analysis/AnalysisEngineImpl.java @@ -52,6 +52,7 @@ import io.codelaser.maddi.cst.api.element.Element; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.InfoMapView; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.api.output.Qualification; @@ -63,6 +64,7 @@ import io.codelaser.maddi.inspection.api.integration.JavaInspectorFactory; import io.codelaser.maddi.modification.analyzer.CheckpointWriter; import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; +import io.codelaser.maddi.modification.analyzer.impl.ElementSummary; import io.codelaser.maddi.modification.analyzer.impl.EventualCluster; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; import io.codelaser.maddi.modification.analyzer.impl.StaticSideEffectAnalyzerImpl; @@ -71,8 +73,11 @@ import io.codelaser.maddi.modification.analyzer.shadow.ShadowModificationPass; import io.codelaser.maddi.modification.common.AnalyzerException; import io.codelaser.maddi.modification.common.defaults.ShallowMethodAnalyzer; +import io.codelaser.maddi.modification.common.util.Culprits; import io.codelaser.maddi.modification.link.impl.LinkFactsImpl; import io.codelaser.maddi.modification.link.io.LinkCodec; +import io.codelaser.maddi.modification.prepwork.CarryDerived; +import io.codelaser.maddi.modification.prepwork.ClearDerived; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.io.AnalysisFingerprint; import io.codelaser.maddi.modification.prepwork.io.DecoratorImpl; @@ -139,7 +144,7 @@ public LinkFacts linkFacts(List order) { } @Override - public String outputDump(io.codelaser.maddi.cst.api.runtime.Runtime runtime, TypeInfo primaryType) { + public String outputDump(Runtime runtime, TypeInfo primaryType) { return AnalysisFingerprint.normalize(AnalysisFingerprint.dump(runtime, primaryType, AnalysisFingerprint.ANALYZER_OUTPUT_ONLY), AnalysisFingerprint.DEFAULT); } @@ -158,16 +163,16 @@ public ModificationOutcome modification(ModificationRequest request) throws IOEx ModificationOptions o = request.options(); boolean sseBefore = StaticSideEffectAnalyzerImpl.ENABLED; boolean clusterBefore = EventualCluster.ENABLED; - boolean culpritsBefore = io.codelaser.maddi.modification.common.util.Culprits.ENABLED; + boolean culpritsBefore = Culprits.ENABLED; if (o.staticSideEffects() != null) StaticSideEffectAnalyzerImpl.ENABLED = o.staticSideEffects(); if (o.eventualCluster() != null) EventualCluster.ENABLED = o.eventualCluster(); - if (o.culprits() != null) io.codelaser.maddi.modification.common.util.Culprits.ENABLED = o.culprits(); + if (o.culprits() != null) Culprits.ENABLED = o.culprits(); try { return modificationWithSwitchesSet(request); } finally { StaticSideEffectAnalyzerImpl.ENABLED = sseBefore; EventualCluster.ENABLED = clusterBefore; - io.codelaser.maddi.modification.common.util.Culprits.ENABLED = culpritsBefore; + Culprits.ENABLED = culpritsBefore; } } @@ -230,10 +235,10 @@ private ModificationOutcome modificationWithSwitchesSet(ModificationRequest requ LOGGER.info("CHECKPOINT: writing pass-boundary deltas to {}", checkpointDir); } if (request.carryFrom() != null) { - io.codelaser.maddi.cst.api.info.InfoMapView view = javaInspector.lastRewireInfoMap(); + InfoMapView view = javaInspector.lastRewireInfoMap(); if (view == null) throw new IllegalArgumentException("carryFrom without a re-parse that rewired"); for (TypeInfo oldType : request.carryFrom()) { - io.codelaser.maddi.modification.prepwork.CarryDerived.primaryType(oldType, view); + CarryDerived.primaryType(oldType, view); } LOGGER.info("Carried the analyzer output of {} rewired primary type(s)", request.carryFrom().size()); } @@ -246,9 +251,9 @@ private ModificationOutcome modificationWithSwitchesSet(ModificationRequest requ // clear-before-recompute: a dirtied element's carried cross-type-derived values // must not block the fresh, possibly-lowering re-analysis // (statement- and variable-level values included: see ClearDerived) - Consumer clearHook = io.codelaser.maddi.modification.prepwork.ClearDerived::element; + Consumer clearHook = ClearDerived::element; if (request.seedPrevious() != null) { - analyzer.setPriorSummaries(io.codelaser.maddi.modification.analyzer.impl.ElementSummary + analyzer.setPriorSummaries(ElementSummary .ofTypes(request.seedPrevious())); } analyzer.analyze(order, request.callGraph(), initialDirty, clearHook); diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/main/TestRunComposer.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/main/TestRunComposer.java index eee3ab09f..060810cd9 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/main/TestRunComposer.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/main/TestRunComposer.java @@ -35,7 +35,7 @@ public class TestRunComposer { @BeforeAll public static void beforeAll() { - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)).setLevel(Level.INFO); + ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME)).setLevel(Level.INFO); ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger("io.codelaser.maddi.shallow")).setLevel(Level.DEBUG); } diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/main/TestRunShallowAnalyzer.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/main/TestRunShallowAnalyzer.java index a9780217b..2b8ac58ee 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/main/TestRunShallowAnalyzer.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/main/TestRunShallowAnalyzer.java @@ -38,7 +38,7 @@ public class TestRunShallowAnalyzer { @BeforeAll public static void beforeAll() { - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)).setLevel(Level.INFO); + ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME)).setLevel(Level.INFO); ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger("io.codelaser.maddi.shallow")).setLevel(Level.DEBUG); } diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/GenerateSupportAnalysisResults.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/GenerateSupportAnalysisResults.java index 61d1f9df5..6d6c35530 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/GenerateSupportAnalysisResults.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/GenerateSupportAnalysisResults.java @@ -10,13 +10,16 @@ import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import io.codelaser.maddi.annotation.Container; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.inspection.api.resource.InputConfiguration; import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; import io.codelaser.maddi.inspection.resource.SourceSetImpl; import io.codelaser.maddi.run.config.AnalysisHintsConfigurationImpl; import io.codelaser.maddi.run.config.Configuration; +import io.codelaser.maddi.support.Either; /** * Manual generator (use case 2 of the AnalysisHints configuration): compiles the curated @@ -41,9 +44,9 @@ public void generate() throws Exception { .setWorkingDirectory(".") .addSourceSets(aapiSource) .addClassPathParts(SourceSetImpl.javaBase(), - SourceSetImpl.sourceSetOf(io.codelaser.maddi.annotation.Container.class), - SourceSetImpl.sourceSetOf(io.codelaser.maddi.support.Either.class), - SourceSetImpl.sourceSetOf(org.slf4j.Logger.class)) + SourceSetImpl.sourceSetOf(Container.class), + SourceSetImpl.sourceSetOf(Either.class), + SourceSetImpl.sourceSetOf(Logger.class)) .build(); AnalysisHintsConfigurationImpl aapi = (AnalysisHintsConfigurationImpl) new AnalysisHintsConfigurationImpl.Builder() .setAnalysisResultsTargetDir(target.toString()) diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestAnalysisEarlyCutoffPrototype.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestAnalysisEarlyCutoffPrototype.java index c52b1aeb9..f0cccf295 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestAnalysisEarlyCutoffPrototype.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestAnalysisEarlyCutoffPrototype.java @@ -23,10 +23,14 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; +import java.util.function.Function; +import java.util.stream.Collectors; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -147,7 +151,7 @@ private TreeMap fingerprintAll(JavaInspector javaInspector, private TreeMap analyzeAndFingerprint() throws IOException { JavaInspector javaInspector = new JavaInspectorImpl(true, false); javaInspector.initialize(inputConfiguration()); - ParseResult pr = javaInspector.parse(java.util.Map.of(), JavaInspectorImpl.DETAILED_SOURCES).parseResult(); + ParseResult pr = javaInspector.parse(Map.of(), JavaInspectorImpl.DETAILED_SOURCES).parseResult(); prepAndAnalyze(javaInspector, pr); return fingerprintAll(javaInspector, pr); } @@ -209,13 +213,13 @@ public void testReloadPathCommentEditCutsOff() throws IOException { write(DATA_V1); JavaInspector javaInspector = new JavaInspectorImpl(true, false); javaInspector.initialize(inputConfiguration()); - ParseResult pr0 = javaInspector.parse(java.util.Map.of(), JavaInspectorImpl.DETAILED_SOURCES).parseResult(); + ParseResult pr0 = javaInspector.parse(Map.of(), JavaInspectorImpl.DETAILED_SOURCES).parseResult(); ComputeCallGraph ccg0 = prepAndAnalyze(javaInspector, pr0); TreeMap before = fingerprintAll(javaInspector, pr0); // edit Data with a leading comment, then drive the real incremental reload path Files.writeString(sourceDir.resolve("x/Data.java"), "// a leading comment\n\n" + DATA_V1); - JavaInspector.ReloadResult rr = javaInspector.reloadSources(inputConfiguration(), java.util.Map.of()); + JavaInspector.ReloadResult rr = javaInspector.reloadSources(inputConfiguration(), Map.of()); Set changed = rr.sourceHasChanged(); assertFalse(changed.isEmpty(), "the edited Data must be reported as source-changed"); @@ -241,12 +245,12 @@ public void testWorklistCommentEditSparesDependents() throws IOException { write(DATA_V1); JavaInspector javaInspector = new JavaInspectorImpl(true, false); javaInspector.initialize(inputConfiguration()); - ParseResult pr0 = javaInspector.parse(java.util.Map.of(), JavaInspectorImpl.DETAILED_SOURCES).parseResult(); + ParseResult pr0 = javaInspector.parse(Map.of(), JavaInspectorImpl.DETAILED_SOURCES).parseResult(); ComputeCallGraph ccg0 = prepAndAnalyze(javaInspector, pr0); TreeMap before = fingerprintAll(javaInspector, pr0); Files.writeString(sourceDir.resolve("x/Data.java"), "// a leading comment\n\n" + DATA_V1); - JavaInspector.ReloadResult rr = javaInspector.reloadSources(inputConfiguration(), java.util.Map.of()); + JavaInspector.ReloadResult rr = javaInspector.reloadSources(inputConfiguration(), Map.of()); Set changed = rr.sourceHasChanged(); Set dependents = new PrimaryTypeUseGraph(ccg0.graph()).dependentsOf(changed); JavaInspector.Invalidated invalidated = ti -> @@ -258,17 +262,17 @@ public void testWorklistCommentEditSparesDependents() throws IOException { // one-hop dependents from the run-0 use graph (edge t -> Y means Y uses t), keyed by fqn G useGraph = new PrimaryTypeUseGraph(ccg0.graph()).graph(); - java.util.Map byFqn = new java.util.HashMap<>(); + Map byFqn = new HashMap<>(); pr0.primaryTypes().forEach(t -> byFqn.put(t.fullyQualifiedName(), t)); - java.util.function.Function> immediateDependents = fqn -> { + Function> immediateDependents = fqn -> { TypeInfo t = byFqn.get(fqn); V v = t == null ? null : useGraph.vertex(t); if (v == null) return Set.of(); return useGraph.edges(v).keySet().stream().map(V::t) - .map(TypeInfo::fullyQualifiedName).collect(java.util.stream.Collectors.toSet()); + .map(TypeInfo::fullyQualifiedName).collect(Collectors.toSet()); }; Set seed = changed.stream().map(TypeInfo::fullyQualifiedName) - .collect(java.util.stream.Collectors.toSet()); + .collect(Collectors.toSet()); // recompute = look up the post-edit fingerprint (a stand-in for actually re-analysing t; the real per-type // recompute against carried dependencies is the documented production-integration gap, docs/design/analysis-rewiring.md) diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestAnalysisHintsCompilation.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestAnalysisHintsCompilation.java index 3803fa8d0..00eee3efa 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestAnalysisHintsCompilation.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestAnalysisHintsCompilation.java @@ -10,7 +10,9 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; +import org.slf4j.Logger; +import io.codelaser.maddi.annotation.Container; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.inspection.api.resource.InputConfiguration; import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; @@ -33,8 +35,8 @@ public void useCases2And3(@TempDir Path resultsDir, @TempDir Path hintsDir) thro .setWorkingDirectory(".") .addSourceSets(aapiSource) .addClassPathParts(SourceSetImpl.javaBase(), - SourceSetImpl.sourceSetOf(io.codelaser.maddi.annotation.Container.class), - SourceSetImpl.sourceSetOf(org.slf4j.Logger.class)) + SourceSetImpl.sourceSetOf(Container.class), + SourceSetImpl.sourceSetOf(Logger.class)) .build(); AnalysisHintsConfigurationImpl aapi = (AnalysisHintsConfigurationImpl) new AnalysisHintsConfigurationImpl.Builder() .setAnalysisResultsTargetDir(resultsDir.toString()) // use case 2 diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestEarlyCutoffSkip.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestEarlyCutoffSkip.java index c1bbfe3af..364315d97 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestEarlyCutoffSkip.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestEarlyCutoffSkip.java @@ -41,6 +41,7 @@ import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.callgraph.ComputeCallGraph; +import io.codelaser.maddi.callgraph.PrimaryTypeUseGraph; import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.info.FieldInfo; import io.codelaser.maddi.cst.api.info.Info; @@ -168,7 +169,7 @@ public void testSkipSparesTheDependent() throws IOException { Files.writeString(baseFile, "// a comment\n\n" + BASE); JavaInspector.ReloadResult rr = javaInspector.reloadSources(inputConfiguration(), Map.of()); Set changed = rr.sourceHasChanged(); - Set dependents = new io.codelaser.maddi.callgraph.PrimaryTypeUseGraph( + Set dependents = new PrimaryTypeUseGraph( ccg0.graph()).dependentsOf(changed); JavaInspector.Invalidated inv = ti -> changed.contains(ti) ? INVALID : dependents.contains(ti) ? REWIRE : UNCHANGED; diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestEarlyCutoffWorklistDriver.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestEarlyCutoffWorklistDriver.java index d762c243b..0ceeb1b78 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestEarlyCutoffWorklistDriver.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestEarlyCutoffWorklistDriver.java @@ -56,6 +56,7 @@ import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.graph.G; +import io.codelaser.maddi.graph.V; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.inspection.api.parser.ParseResult; import io.codelaser.maddi.inspection.api.resource.InputConfiguration; @@ -239,7 +240,7 @@ private EarlyCutoffWorklist.Result reloadAndDrive(ComputeCallGraph ccg G useGraph = new PrimaryTypeUseGraph(ccg0.graph()).graph(); Map> deps = new HashMap<>(); useGraph.vertices().forEach(v -> { - Map, Long> out = useGraph.edges(v); // null for a sink + Map, Long> out = useGraph.edges(v); // null for a sink Set users = out == null ? Set.of() : out.keySet().stream() .map(u -> pr1.findType(u.t().fullyQualifiedName())).collect(Collectors.toSet()); deps.put(pr1.findType(v.t().fullyQualifiedName()), users); diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestFernflowerNullabilityCauses.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestFernflowerNullabilityCauses.java index e7d54db35..533a6b81e 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestFernflowerNullabilityCauses.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestFernflowerNullabilityCauses.java @@ -1,18 +1,29 @@ package io.codelaser.maddi.run.openjdkmain; +import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.Objects; import java.util.Set; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; import io.codelaser.maddi.analysis.api.PrepOutcome; import io.codelaser.maddi.analysis.api.PrepRequest; import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; +import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.info.Info; +import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.type.NullableState; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; @@ -24,6 +35,7 @@ import io.codelaser.maddi.modification.analyzer.nullability.Report; import io.codelaser.maddi.modification.analyzer.nullability.Switches; import io.codelaser.maddi.modification.analyzer.nullability.World; +import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; import io.codelaser.maddi.run.analysis.AnalysisEngineImpl; import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; @@ -41,16 +53,16 @@ public class TestFernflowerNullabilityCauses { @BeforeAll public static void beforeAll() { - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) - .setLevel(ch.qos.logback.classic.Level.INFO); + ((Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) + .setLevel(Level.INFO); } @Test public void test() throws Exception { // NULLABILITY_CORPUS (passed on by a --no-daemon build): another J2K corpus, e.g. langchain4j - String corpusName = java.util.Objects.requireNonNullElse(System.getenv("NULLABILITY_CORPUS"), "fernflower"); + String corpusName = Objects.requireNonNullElse(System.getenv("NULLABILITY_CORPUS"), "fernflower"); // nacos: one module per run, J2K_NACOS_MAIN as TestJavaToKotlinNacosNullability (api/main by default) - String nacosMain = java.util.Objects.requireNonNullElse(System.getenv("J2K_NACOS_MAIN"), "api/main"); + String nacosMain = Objects.requireNonNullElse(System.getenv("J2K_NACOS_MAIN"), "api/main"); long parseStart = System.nanoTime(); // jenkins: its core module, as TestJavaToKotlinJenkinsNullability JavaToKotlinRatchet.Corpus corpus = switch (corpusName) { @@ -93,7 +105,7 @@ public void test() throws Exception { // environment's (Switches), each written to build/-nullability-causes-.txt; without it, one pass // to build/-nullability-causes.txt. The phases' times go to build/-nullability-timing.txt. String sides = System.getenv("NULLABILITY_SIDES"); - List timing = new java.util.ArrayList<>(List.of("parse " + parseMs + " ms", "prep " + prepMs + " ms", + List timing = new ArrayList<>(List.of("parse " + parseMs + " ms", "prep " + prepMs + " ms", "analysis " + analysisMs + " ms")); for (String side : sides == null ? List.of("") : List.of(sides.split(","))) { Switches.offForNextPasses(side.isEmpty() || "on".equals(side) ? Set.of() : Set.of(side.split("\\+"))); @@ -107,37 +119,37 @@ public void test() throws Exception { long passMs = (System.nanoTime() - passStart) / 1_000_000; // NULLMARKEDDEBUG=: each pass rewrites it; keep one per side String boundsDump = System.getenv("NULLMARKEDDEBUG"); - if (boundsDump != null && sides != null && java.nio.file.Files.exists(Path.of(boundsDump))) { - java.nio.file.Files.copy(Path.of(boundsDump), Path.of(boundsDump + "-" + side), - java.nio.file.StandardCopyOption.REPLACE_EXISTING); + if (boundsDump != null && sides != null && Files.exists(Path.of(boundsDump))) { + Files.copy(Path.of(boundsDump), Path.of(boundsDump + "-" + side), + StandardCopyOption.REPLACE_EXISTING); } List lines = lines(report, corpus); timing.add("pass " + (side.isEmpty() ? "on" : side) + " " + passMs + " ms"); String suffix = side.isEmpty() ? "" : "-" + side; - java.nio.file.Files.write(Path.of("build/" + corpusName + "-nullability-causes" + suffix + ".txt"), lines); - org.junit.jupiter.api.Assertions.assertFalse(lines.isEmpty()); + Files.write(Path.of("build/" + corpusName + "-nullability-causes" + suffix + ".txt"), lines); + Assertions.assertFalse(lines.isEmpty()); } - java.nio.file.Files.write(Path.of("build/" + corpusName + "-nullability-timing.txt"), timing); + Files.write(Path.of("build/" + corpusName + "-nullability-timing.txt"), timing); timing.forEach(t -> System.err.println("NULLTIMING " + corpusName + " " + t)); } private static List lines(Report report, JavaToKotlinRatchet.Corpus corpus) { - List lines = new java.util.ArrayList<>(); + List lines = new ArrayList<>(); report.verdicts().forEach((info, pt) -> { String n = info.fullyQualifiedName(); for (int i = 0; i < pt.parameters().size(); i++) { - if (pt.parameters().get(i).nullable() == io.codelaser.maddi.cst.api.type.NullableState.NULLABLE) { + if (pt.parameters().get(i).nullable() == NullableState.NULLABLE) { lines.add(n + " [" + i + "] :: " + report.explain(new Arg(info, i))); } } - if (pt.nullable() == io.codelaser.maddi.cst.api.type.NullableState.NULLABLE) { + if (pt.nullable() == NullableState.NULLABLE) { lines.add(n + " TOP :: " + report.explain(info)); } }); // a superclass's nullable type arguments (NullabilityFacts.parentClass), with what reaches them report.parentClasses().forEach((type, parent) -> { for (int i = 0; i < parent.parameters().size(); i++) { - if (parent.parameters().get(i).nullable() == io.codelaser.maddi.cst.api.type.NullableState.NULLABLE) { + if (parent.parameters().get(i).nullable() == NullableState.NULLABLE) { lines.add(type.fullyQualifiedName() + " SUPER [" + i + "] :: " + report.explain(new Arg(new AnonymousThis(type), i))); } @@ -148,9 +160,9 @@ private static List lines(Report report, JavaToKotlinRatchet.Corpus corp report.locals().forEach((local, pt) -> { String where = local.methodInfo().fullyQualifiedName(); boolean nullableElements = pt.arrays() > 0 && pt.componentType().nullable() - == io.codelaser.maddi.cst.api.type.NullableState.NULLABLE; + == NullableState.NULLABLE; for (int i = 0; i < pt.parameters().size(); i++) { - if (pt.parameters().get(i).nullable() == io.codelaser.maddi.cst.api.type.NullableState.NULLABLE) { + if (pt.parameters().get(i).nullable() == NullableState.NULLABLE) { lines.add(where + " LOCAL " + local.name() + " [" + i + "] :: " + report.explain(new Arg(local, i))); } @@ -163,22 +175,22 @@ private static List lines(Report report, JavaToKotlinRatchet.Corpus corp + (pt.arrays() > 0 ? " elements " + pt.componentType().nullable() : "")); } }); - java.util.Collections.sort(lines); + Collections.sort(lines); // CAUSES_CALLS=:: in that method, each call to that callee with its argument links - String calls = java.util.Objects.requireNonNullElse(System.getenv("CAUSES_CALLS"), ""); + String calls = Objects.requireNonNullElse(System.getenv("CAUSES_CALLS"), ""); if (calls.contains(":")) { String method = calls.substring(0, calls.indexOf(':')); String callee = calls.substring(calls.indexOf(':') + 1); - corpus.types().stream().flatMap(io.codelaser.maddi.cst.api.info.TypeInfo::recursiveSubTypeStream) - .flatMap(io.codelaser.maddi.cst.api.info.TypeInfo::constructorAndMethodStream) + corpus.types().stream().flatMap(TypeInfo::recursiveSubTypeStream) + .flatMap(TypeInfo::constructorAndMethodStream) .filter(mi -> mi.name().equals(method) && mi.methodBody() != null) .forEach(mi -> mi.methodBody().visit(e -> { - if (e instanceof io.codelaser.maddi.cst.api.expression.MethodCall mc + if (e instanceof MethodCall mc && mc.methodInfo() != null && callee.equals(mc.methodInfo().name())) { lines.add("CALL " + mc.source().compact2() + " " + mc.methodInfo().fullyQualifiedName() + " args=" + mc.analysis().getOrNull( - io.codelaser.maddi.modification.link.impl.LinkComputerImpl.LINKED_VARIABLES_ARGUMENTS, - io.codelaser.maddi.modification.link.impl.LinkComputerImpl.ListOfLinksImpl.class)); + LinkComputerImpl.LINKED_VARIABLES_ARGUMENTS, + LinkComputerImpl.ListOfLinksImpl.class)); } return true; })); diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestGuava.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestGuava.java index 5a59f1030..9ae92d295 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestGuava.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestGuava.java @@ -4,6 +4,8 @@ import java.io.IOException; import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; import org.apache.commons.cli.ParseException; import org.junit.jupiter.api.BeforeAll; @@ -46,7 +48,7 @@ public void test() throws IOException, ParseException { // (GUAVA.md §Regenerating), at the work ceiling it names. Read before the fixpoint engine's class loads. String resultsDir = System.getenv("GUAVA_RESULTS_DIR"); if (resultsDir != null) System.setProperty("maddi.workCeiling", "30000000"); - java.util.List args = new java.util.ArrayList<>(java.util.List.of( + List args = new ArrayList<>(List.of( "--input-configuration=" + CONFIG , "--analysis-steps=modification" , "--preload-analysis-results-dirs=../../maddi/maddi-aapi-archive/src/main/resources/io/codelaser/maddi/aapi/archive/analyzedPackageFiles/jdk" diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestIncrementalConsumptionWake.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestIncrementalConsumptionWake.java index 833ed4370..69b8990ec 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestIncrementalConsumptionWake.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestIncrementalConsumptionWake.java @@ -25,6 +25,7 @@ import java.nio.file.Path; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.TreeSet; import java.util.function.Function; @@ -41,6 +42,7 @@ import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.cst.impl.analysis.ConsumptionEdgeRecorder; +import io.codelaser.maddi.graph.G; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.inspection.api.parser.ParseResult; import io.codelaser.maddi.inspection.api.resource.InputConfiguration; @@ -128,7 +130,7 @@ private PrepAnalyzer prep() { return new PrepAnalyzer(javaInspector.runtime(), new PrepAnalyzer.Options.Builder().setFaultTolerant(true).build()); } - private void analyze(List order, io.codelaser.maddi.graph.G graph) { + private void analyze(List order, G graph) { var analyzer = new IteratingAnalyzerImpl(javaInspector, new IteratingAnalyzerImpl.ConfigurationBuilder() .setMaxIterations(20).setStopWhenCycleDetectedAndNoImprovements(true).build()); if (graph == null) analyzer.analyze(order); @@ -177,7 +179,7 @@ private Set reloadAndDrive(ComputeCallGraph ccg0, IncrementalState state Function> consumersOf = t -> state.consumers() .getOrDefault(t.fullyQualifiedName(), Set.of()).stream() .map(fqn -> pr1.findType(fqn)) - .filter(java.util.Objects::nonNull) + .filter(Objects::nonNull) .collect(Collectors.toSet()); Set seed = changed.stream().map(t -> pr1.findType(t.fullyQualifiedName())) diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestIsolateFernflowerGroup.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestIsolateFernflowerGroup.java index 2c1eaec9c..e1a0286c9 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestIsolateFernflowerGroup.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestIsolateFernflowerGroup.java @@ -3,9 +3,11 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import java.io.IOException; +import java.io.UncheckedIOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; +import java.util.Comparator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -24,6 +26,8 @@ import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; import io.codelaser.maddi.modification.common.util.IsolateClass; @@ -40,8 +44,8 @@ public class TestIsolateFernflowerGroup { @BeforeAll public static void beforeAll() { - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) - .setLevel(ch.qos.logback.classic.Level.WARN); + ((Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) + .setLevel(Level.WARN); } @Test @@ -68,7 +72,7 @@ public void domHelperGroup() throws Exception { Path out = Path.of("build/isolate/fernflower-domhelper"); if (Files.exists(out)) { try (var walk = Files.walk(out)) { - walk.sorted(java.util.Comparator.reverseOrder()).forEach(p -> p.toFile().delete()); + walk.sorted(Comparator.reverseOrder()).forEach(p -> p.toFile().delete()); } } List files = new ArrayList<>(); @@ -112,7 +116,7 @@ private static String verbatim(MethodInfo methodInfo) { } return sb.toString(); } catch (IOException e) { - throw new java.io.UncheckedIOException(e); + throw new UncheckedIOException(e); } } } diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpFernflowerFacts.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpFernflowerFacts.java index 99b2f6677..4ae0e4e75 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpFernflowerFacts.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpFernflowerFacts.java @@ -7,6 +7,8 @@ import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; import io.codelaser.maddi.run.j2cs.JavaToCSharpRatchet; import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; @@ -22,8 +24,8 @@ public class TestJavaToCSharpFernflowerFacts { /* INFO, as TestJavaToKotlinFernflowerNullability: at DEBUG the analyzer's log fills the test report. */ @BeforeAll public static void beforeAll() { - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) - .setLevel(ch.qos.logback.classic.Level.INFO); + ((Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) + .setLevel(Level.INFO); } @Test diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpLangchain4jFacts.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpLangchain4jFacts.java index 613a9ff82..c3a9abf0d 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpLangchain4jFacts.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpLangchain4jFacts.java @@ -7,6 +7,8 @@ import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; import io.codelaser.maddi.run.j2cs.JavaToCSharpRatchet; import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; @@ -22,8 +24,8 @@ public class TestJavaToCSharpLangchain4jFacts { /* INFO, as TestJavaToKotlinLangchain4jNullability: at DEBUG the analyzer's log fills the test report. */ @BeforeAll public static void beforeAll() { - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) - .setLevel(ch.qos.logback.classic.Level.INFO); + ((Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) + .setLevel(Level.INFO); } @Test diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpTimefoldFacts.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpTimefoldFacts.java index b36f1407f..f83a087b5 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpTimefoldFacts.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToCSharpTimefoldFacts.java @@ -7,6 +7,8 @@ import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; import io.codelaser.maddi.run.j2cs.JavaToCSharpRatchet; import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; @@ -25,12 +27,12 @@ public class TestJavaToCSharpTimefoldFacts { /* INFO, as TestTimefoldSolver: at DEBUG the analyzer's log fills the test report. */ @BeforeAll public static void beforeAll() { - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) - .setLevel(ch.qos.logback.classic.Level.INFO); + ((Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) + .setLevel(Level.INFO); // corpus-scale noise, as TestTimefoldSolver - ((ch.qos.logback.classic.Logger) LoggerFactory + ((Logger) LoggerFactory .getLogger("io.codelaser.maddi.modification.link.impl.linkgraph.RedundantLinks")) - .setLevel(ch.qos.logback.classic.Level.ERROR); + .setLevel(Level.ERROR); } @Test diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinAblation.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinAblation.java index bc6557207..264826228 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinAblation.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinAblation.java @@ -7,6 +7,8 @@ import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; import io.codelaser.maddi.cst.impl.analysis.ModificationFacts; import io.codelaser.maddi.cst.impl.analysis.NullabilityFacts; import io.codelaser.maddi.cst.print.kotlin.KotlinPrintOptions; @@ -31,8 +33,8 @@ public class TestJavaToKotlinAblation { @BeforeAll public static void beforeAll() { - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) - .setLevel(ch.qos.logback.classic.Level.INFO); + ((Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) + .setLevel(Level.INFO); } @Test diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinFernflowerNullability.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinFernflowerNullability.java index 4d4a39e6a..54a600690 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinFernflowerNullability.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinFernflowerNullability.java @@ -7,6 +7,8 @@ import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; /** @@ -26,8 +28,8 @@ public class TestJavaToKotlinFernflowerNullability { /* INFO, as TestNullabilityOracleGuava: at DEBUG the analyzer's log fills the test report. */ @BeforeAll public static void beforeAll() { - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) - .setLevel(ch.qos.logback.classic.Level.INFO); + ((Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) + .setLevel(Level.INFO); } @Test diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinGuavaNullability.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinGuavaNullability.java index b80ca9e0b..f36301ae4 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinGuavaNullability.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinGuavaNullability.java @@ -7,6 +7,8 @@ import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; /** @@ -24,8 +26,8 @@ public class TestJavaToKotlinGuavaNullability { /* INFO, as TestNullabilityOracleGuava: at DEBUG the analyzer's log fills the test report. */ @BeforeAll public static void beforeAll() { - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) - .setLevel(ch.qos.logback.classic.Level.INFO); + ((Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) + .setLevel(Level.INFO); } @Test diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinJenkinsNullability.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinJenkinsNullability.java index 13bb00262..4ef0fd89f 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinJenkinsNullability.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinJenkinsNullability.java @@ -1,5 +1,7 @@ package io.codelaser.maddi.run.openjdkmain; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Tag; @@ -20,8 +22,8 @@ public class TestJavaToKotlinJenkinsNullability { /* INFO, as TestNullabilityOracleGuava: at DEBUG the analyzer's log fills the test report. */ @BeforeAll public static void beforeAll() { - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) - .setLevel(ch.qos.logback.classic.Level.INFO); + ((Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) + .setLevel(Level.INFO); } @Test diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinLangchain4jNullability.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinLangchain4jNullability.java index 01075c612..58a321db3 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinLangchain4jNullability.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinLangchain4jNullability.java @@ -7,6 +7,8 @@ import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; /** @@ -24,8 +26,8 @@ public class TestJavaToKotlinLangchain4jNullability { /* INFO, as TestNullabilityOracleGuava: at DEBUG the analyzer's log fills the test report. */ @BeforeAll public static void beforeAll() { - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) - .setLevel(ch.qos.logback.classic.Level.INFO); + ((Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) + .setLevel(Level.INFO); } @Test diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinNacosNullability.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinNacosNullability.java index 7eb25ba78..427825978 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinNacosNullability.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinNacosNullability.java @@ -1,5 +1,7 @@ package io.codelaser.maddi.run.openjdkmain; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Tag; @@ -21,8 +23,8 @@ public class TestJavaToKotlinNacosNullability { /* INFO, as TestNullabilityOracleGuava: at DEBUG the analyzer's log fills the test report. */ @BeforeAll public static void beforeAll() { - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) - .setLevel(ch.qos.logback.classic.Level.INFO); + ((Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) + .setLevel(Level.INFO); } @Test diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinPreconditions.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinPreconditions.java index 9b26ef2d0..2a766b547 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinPreconditions.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinPreconditions.java @@ -8,6 +8,8 @@ import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; import io.codelaser.maddi.cst.print.kotlin.KotlinPrintOptions; import io.codelaser.maddi.modification.analyzer.nullability.Policy; import io.codelaser.maddi.modification.analyzer.nullability.Report; @@ -28,8 +30,8 @@ public class TestJavaToKotlinPreconditions { @BeforeAll public static void beforeAll() { - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) - .setLevel(ch.qos.logback.classic.Level.INFO); + ((Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) + .setLevel(Level.INFO); } @Test diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinTimefoldNullability.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinTimefoldNullability.java index 43aa5d63a..b9fc907f4 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinTimefoldNullability.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestJavaToKotlinTimefoldNullability.java @@ -1,5 +1,7 @@ package io.codelaser.maddi.run.openjdkmain; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Tag; @@ -20,8 +22,8 @@ public class TestJavaToKotlinTimefoldNullability { /* INFO, as TestNullabilityOracleGuava: at DEBUG the analyzer's log fills the test report. */ @BeforeAll public static void beforeAll() { - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) - .setLevel(ch.qos.logback.classic.Level.INFO); + ((Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) + .setLevel(Level.INFO); } @Test diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestKotlinConfReproduce.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestKotlinConfReproduce.java index 5d427c27f..283ad71f3 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestKotlinConfReproduce.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestKotlinConfReproduce.java @@ -7,6 +7,8 @@ import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; import io.codelaser.maddi.cst.impl.analysis.ModificationFacts; import io.codelaser.maddi.cst.print.kotlin.KotlinPrintOptions; import io.codelaser.maddi.modification.analyzer.nullability.Report; @@ -24,8 +26,8 @@ public class TestKotlinConfReproduce { @BeforeAll public static void beforeAll() { - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) - .setLevel(ch.qos.logback.classic.Level.INFO); + ((Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) + .setLevel(Level.INFO); } @Test diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestLangchain4jCollections.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestLangchain4jCollections.java index e579d82b6..27b5f8724 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestLangchain4jCollections.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestLangchain4jCollections.java @@ -8,6 +8,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.TreeMap; @@ -16,6 +17,8 @@ import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; import io.codelaser.maddi.analysis.api.PrepOutcome; import io.codelaser.maddi.analysis.api.PrepRequest; import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; @@ -26,11 +29,17 @@ import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.ParameterInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.api.statement.Statement; import io.codelaser.maddi.cst.api.type.ParameterizedType; import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.modification.analyzer.IteratingAnalyzer; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl; +import io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl; +import io.codelaser.maddi.modification.prepwork.variable.impl.VariableInfoImpl; import io.codelaser.maddi.run.analysis.AnalysisEngineImpl; import io.codelaser.maddi.run.j2k.JavaToKotlinRatchet; @@ -52,8 +61,8 @@ public class TestLangchain4jCollections { @BeforeAll public static void beforeAll() { - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) - .setLevel(ch.qos.logback.classic.Level.INFO); + ((Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) + .setLevel(Level.INFO); } @Test @@ -65,7 +74,7 @@ public void test() throws Exception { // the JDK alone, this test's setup before 2026-10-11. The tests' `assertThat(list)` made fields modified // until AssertJ had hints (CodeLaser/maddi#116). List hints = System.getenv("LC_JDK_ONLY") != null ? List.of(JDK_HINTS) - : io.codelaser.maddi.modification.prepwork.io.LoadAnalysisResults.ANALYZED_RESULTS; + : LoadAnalysisResults.ANALYZED_RESULTS; engine.resultsLoader(javaInspector.runtime(), javaInspector.mainSources()).load(hints); var parseResult = corpus.summary().parseResult(); PrepOutcome prep = engine.prep(new PrepRequest(javaInspector.runtime(), Set.copyOf(parseResult.primaryTypes()), @@ -117,15 +126,15 @@ public void test() throws Exception { }); Collections.sort(lines); // -Dprobe.method= (or PROBE_METHOD, which a --no-daemon build passes on): per statement of that method, each parameter's UNMODIFIED_VARIABLE and links - String probe = System.getProperty("probe.method", java.util.Objects.requireNonNullElse(System.getenv("PROBE_METHOD"), "")); + String probe = System.getProperty("probe.method", Objects.requireNonNullElse(System.getenv("PROBE_METHOD"), "")); if (!probe.isEmpty()) { corpus.types().stream().flatMap(TypeInfo::recursiveSubTypeStream) .flatMap(TypeInfo::constructorAndMethodStream) .filter(mi -> mi.name().equals(probe) && mi.methodBody() != null) .peek(mi -> { var mlv = mi.analysis().getOrNull( - io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.METHOD_LINKS, - io.codelaser.maddi.modification.link.impl.MethodLinkedVariablesImpl.class); + MethodLinkedVariablesImpl.METHOD_LINKS, + MethodLinkedVariablesImpl.class); lines.add("PROBE " + mi.fullyQualifiedName() + " modified=" + (mlv == null ? "-" : mlv.modified())); for (ParameterInfo pi : mi.parameters()) { lines.add("PROBE " + pi.name() + " throughPassedFunction=" + pi.analysis().getOrNull( @@ -133,15 +142,15 @@ public void test() throws Exception { } }) .forEach(mi -> mi.methodBody().visit(e -> { - if (e instanceof io.codelaser.maddi.cst.api.statement.Statement st) { - var vd = io.codelaser.maddi.modification.prepwork.variable.impl.VariableDataImpl.of(st); + if (e instanceof Statement st) { + var vd = VariableDataImpl.of(st); if (vd != null) { for (ParameterInfo pi : mi.parameters()) { if (!vd.isKnown(pi.fullyQualifiedName())) continue; var vi = vd.variableInfo(pi.fullyQualifiedName()); lines.add("PROBE " + mi.name() + " @" + st.source().compact2() + " " + pi.name() + " unmodified=" + vi.analysis().getOrNull( - io.codelaser.maddi.modification.prepwork.variable.impl.VariableInfoImpl.UNMODIFIED_VARIABLE, + VariableInfoImpl.UNMODIFIED_VARIABLE, Value.class) + " links=" + vi.linkedVariablesOrEmpty()); } } @@ -168,7 +177,7 @@ private static void count(Map summary, String kind, boolean unmod // a method whose analysis gave up (fault tolerance): its parameters keep the conservative 'modified' private static String degraded(MethodInfo mi) { return mi.analysis().getOrDefault(PropertyImpl.DEGRADED_ANALYSIS_METHOD, - io.codelaser.maddi.cst.impl.analysis.ValueImpl.BoolImpl.FALSE).isTrue() ? " DEGRADED" : ""; + ValueImpl.BoolImpl.FALSE).isTrue() ? " DEGRADED" : ""; } private static String values(Info info, Property... properties) { diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestLibraryCallCensus.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestLibraryCallCensus.java index 7c6b019ba..b9a52983d 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestLibraryCallCensus.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestLibraryCallCensus.java @@ -20,6 +20,9 @@ import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.expression.ConstructorCall; import io.codelaser.maddi.cst.api.expression.MethodCall; import io.codelaser.maddi.cst.api.info.MethodInfo; @@ -53,8 +56,8 @@ public class TestLibraryCallCensus { @BeforeAll public static void beforeAll() { - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) - .setLevel(ch.qos.logback.classic.Level.WARN); + ((Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) + .setLevel(Level.WARN); } // library -> {calls, members, calls without hints, modifying calls}, per corpus and over all of them @@ -168,7 +171,7 @@ private static String nullability(MethodInfo m) { return r + ":" + ps; } - private static String state(io.codelaser.maddi.cst.api.analysis.Value.Nullability n) { + private static String state(Value.Nullability n) { return switch (n.state()) { case NONNULL -> "N"; case NULLABLE -> "Q"; diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestNullabilityOracleGuava.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestNullabilityOracleGuava.java index 195557298..cee91e212 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestNullabilityOracleGuava.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestNullabilityOracleGuava.java @@ -6,6 +6,7 @@ import static org.junit.jupiter.api.Assertions.fail; import java.io.IOException; +import java.io.UncheckedIOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; @@ -23,6 +24,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import ch.qos.logback.classic.Level; import io.codelaser.maddi.analysis.api.PrepOutcome; import io.codelaser.maddi.analysis.api.PrepRequest; import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; @@ -74,8 +76,8 @@ public class TestNullabilityOracleGuava { */ @BeforeAll public static void beforeAll() { - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)) - .setLevel(ch.qos.logback.classic.Level.INFO); + ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME)) + .setLevel(Level.INFO); } private record Parsed(JavaInspector javaInspector, Summary summary, List types) { @@ -272,7 +274,7 @@ private static NullabilityComparison measure(String name, List types, Report report) { NullabilityComparison comparison = new NullabilityComparison(); int[] missing = new int[1]; - List disagreements = new java.util.ArrayList<>(); + List disagreements = new ArrayList<>(); declarations(types, dn, (kind, info, declared) -> { ParameterizedType verdict = report.verdicts().get(info); if (verdict == null) { @@ -315,14 +317,14 @@ private static NullabilityComparison measure(String name, List types, LOGGER.info("INFERENCE ({} policy), {} declarations without a verdict\n{}", name, missing[0], comparison.report()); // every disagreement with its cause chain, for classification: kind, shape, element, chain - java.nio.file.Path out = java.nio.file.Path.of("build", "nullability-oracle-guava-" + name + ".tsv"); + Path out = Path.of("build", "nullability-oracle-guava-" + name + ".tsv"); try { - java.nio.file.Files.createDirectories(out.getParent()); - java.nio.file.Files.write(out, disagreements.stream().sorted().toList()); + Files.createDirectories(out.getParent()); + Files.write(out, disagreements.stream().sorted().toList()); LOGGER.info("INFERENCE ({} policy): {} disagreements written to {}", name, disagreements.size(), out.toAbsolutePath()); } catch (IOException e) { - throw new java.io.UncheckedIOException(e); + throw new UncheckedIOException(e); } return comparison; } diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestOutsideReloadCarry.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestOutsideReloadCarry.java index 0e6a7017a..b814bd91a 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestOutsideReloadCarry.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestOutsideReloadCarry.java @@ -26,6 +26,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Predicate; import javax.tools.JavaCompiler; import javax.tools.JavaFileObject; @@ -41,6 +42,7 @@ import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.callgraph.ComputeCallGraph; import io.codelaser.maddi.callgraph.PrimaryTypeUseGraph; +import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.FieldInfo; @@ -136,7 +138,7 @@ private ComputeCallGraph analyze(ParseResult pr) { // the DERIVED (cross-type) analyzer output: verdicts + link summaries. Precisely the CROSS_TYPE_DERIVED tier -- // excludes both the parse-time tier the rewire phase already carried (GET_SET_FIELD) and the intrinsic tier // prepwork re-derives (VARIABLE_DATA, PART_OF_CONSTRUCTION, ...). Together, phase-carry + prep + this = full output. - private static final java.util.function.Predicate DERIVED_OUTPUT = + private static final Predicate DERIVED_OUTPUT = AnalysisFingerprint.CROSS_TYPE_DERIVED_ONLY; /** Carry a type's derived analyzer output onto its rewired copy, via the read-only view. */ diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestParSeqLinkBench.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestParSeqLinkBench.java index 2a0e00425..eafe31d79 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestParSeqLinkBench.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestParSeqLinkBench.java @@ -18,6 +18,7 @@ import io.codelaser.maddi.inspection.api.parser.Summary; import io.codelaser.maddi.inspection.api.resource.InputConfiguration; import io.codelaser.maddi.inspection.openjdk.JavaInspectorImpl; +import io.codelaser.maddi.modification.link.LinkComputer; import io.codelaser.maddi.modification.link.impl.LinkComputerImpl; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.run.config.javac.ParseJavacList; @@ -72,7 +73,7 @@ public void bench() throws Exception { // PRODUCTION disables the checkDuplicateNames debug assertion so linking runs to completion (we are // measuring time on deep structures, not asserting graph invariants). - LinkComputerImpl link = new LinkComputerImpl(javaInspector, io.codelaser.maddi.modification.link.LinkComputer.Options.PRODUCTION); + LinkComputerImpl link = new LinkComputerImpl(javaInspector, LinkComputer.Options.PRODUCTION); // first link the production parseq types so their method summaries (callees of the tests) are available for (TypeInfo t : parseqTypes) { if (t.simpleName().startsWith("Test") || t.simpleName().startsWith("Common")) continue; diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRewireInheritedPrivateField.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRewireInheritedPrivateField.java index 9fbc1adf7..93b95dc55 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRewireInheritedPrivateField.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRewireInheritedPrivateField.java @@ -25,7 +25,9 @@ import java.nio.file.Path; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; +import java.util.TreeMap; import java.util.stream.Stream; import javax.tools.JavaCompiler; @@ -148,7 +150,7 @@ private static List fieldsIn(TypeInfo type) { return type.constructorAndMethodStream() .map(m -> m.analysis().getOrNull(MethodLinkedVariablesImpl.METHOD_LINKS, MethodLinkedVariablesImpl.class)) - .filter(java.util.Objects::nonNull) + .filter(Objects::nonNull) .flatMap(mlv -> Stream.concat(Stream.of(mlv.ofReturnValue()), mlv.ofParameters().stream())) .flatMap(Links::stream) .flatMap(l -> Stream.of(l.from(), l.to())) @@ -173,7 +175,7 @@ public void test() throws IOException { ParseResult pr0 = javaInspector.parse(Map.of(), JavaInspectorImpl.DETAILED_SOURCES).parseResult(); ComputeCallGraph ccg0 = analyze(javaInspector, pr0); TypeInfo oldSub = pr0.findType("c.d.Sub"); - Map linksBefore = new java.util.TreeMap<>(); + Map linksBefore = new TreeMap<>(); oldSub.constructorAndMethodStream().forEach(m -> linksBefore.put(m.name(), String.valueOf(m.analysis() .getOrNull(MethodLinkedVariablesImpl.METHOD_LINKS, MethodLinkedVariablesImpl.class)))); // the shape: get() returns Base's private field, which its links name as a field of Sub @@ -197,12 +199,12 @@ public void test() throws IOException { TypeInfo oldBag = pr0.findType("c.d.Bag"); TypeInfo newBag = pr1.findType("c.d.Bag"); assertNotSame(oldBag, newBag, "Bag was rewired"); - Map bagBefore = new java.util.TreeMap<>(); + Map bagBefore = new TreeMap<>(); oldBag.constructorAndMethodStream().forEach(m -> bagBefore.put(m.name(), String.valueOf(m.analysis() .getOrNull(MethodLinkedVariablesImpl.METHOD_LINKS, MethodLinkedVariablesImpl.class)))); oldBag.constructorAndMethodStream().forEach(oldMethod -> view.methodInfo(oldMethod).analysis() .setAll(oldMethod.analysis().rewire(view, AnalysisFingerprint.CROSS_TYPE_DERIVED_ONLY))); - Map bagAfter = new java.util.TreeMap<>(); + Map bagAfter = new TreeMap<>(); newBag.constructorAndMethodStream().forEach(m -> bagAfter.put(m.name(), String.valueOf(m.analysis() .getOrNull(MethodLinkedVariablesImpl.METHOD_LINKS, MethodLinkedVariablesImpl.class)))); assertEquals(bagBefore, bagAfter, "Bag's links are carried as they were"); @@ -211,7 +213,7 @@ public void test() throws IOException { "a virtual field of Bag, owned by the rewired Bag: " + virtual); virtual.forEach(f -> assertNotSame(oldBag, f.owner(), () -> f + " is owned by the old Bag")); - Map linksAfter = new java.util.TreeMap<>(); + Map linksAfter = new TreeMap<>(); newSub.constructorAndMethodStream().forEach(m -> linksAfter.put(m.name(), String.valueOf(m.analysis() .getOrNull(MethodLinkedVariablesImpl.METHOD_LINKS, MethodLinkedVariablesImpl.class)))); assertEquals(linksBefore, linksAfter, "the links are carried as they were"); diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRunComposer.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRunComposer.java index 83b440772..5c4d366b6 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRunComposer.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRunComposer.java @@ -35,7 +35,7 @@ public class TestRunComposer { @BeforeAll public static void beforeAll() { - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)).setLevel(Level.INFO); + ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME)).setLevel(Level.INFO); ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger("io.codelaser.maddi.shallow")).setLevel(Level.DEBUG); } diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRunShallowAnalyzer.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRunShallowAnalyzer.java index 0e58e7c0b..e1c7c7fc0 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRunShallowAnalyzer.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestRunShallowAnalyzer.java @@ -37,7 +37,7 @@ public class TestRunShallowAnalyzer { @BeforeAll public static void beforeAll() { - ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)).setLevel(Level.INFO); + ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME)).setLevel(Level.INFO); ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger("io.codelaser.maddi.shallow")).setLevel(Level.DEBUG); } diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestWarmAnalysisAfterPartialReparse.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestWarmAnalysisAfterPartialReparse.java index 382e5ada3..d22aeb04b 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestWarmAnalysisAfterPartialReparse.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestWarmAnalysisAfterPartialReparse.java @@ -28,8 +28,10 @@ import java.util.Map; import java.util.Set; import java.util.TreeMap; +import java.util.TreeSet; import java.util.function.Consumer; import java.util.function.Predicate; +import java.util.stream.Collectors; import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; @@ -39,10 +41,13 @@ import io.codelaser.maddi.callgraph.CallGraphContributions; import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.callgraph.ComputeCallGraph; +import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.MethodInfo; import io.codelaser.maddi.cst.api.info.TypeInfo; +import io.codelaser.maddi.cst.impl.analysis.PropertyImpl; +import io.codelaser.maddi.cst.impl.analysis.ValueImpl; import io.codelaser.maddi.inspection.api.integration.JavaInspector; import io.codelaser.maddi.inspection.api.parser.ParseResult; import io.codelaser.maddi.inspection.api.resource.InputConfiguration; @@ -50,6 +55,7 @@ import io.codelaser.maddi.inspection.resource.InputConfigurationImpl; import io.codelaser.maddi.inspection.resource.SourceSetImpl; import io.codelaser.maddi.modification.analyzer.impl.IteratingAnalyzerImpl; +import io.codelaser.maddi.modification.prepwork.ClearDerived; import io.codelaser.maddi.modification.prepwork.PrepAnalyzer; import io.codelaser.maddi.modification.prepwork.io.AnalysisFingerprint; @@ -104,7 +110,7 @@ public class User { } """; - private static final Predicate OUTPUT = + private static final Predicate OUTPUT = AnalysisFingerprint.ANALYZER_OUTPUT_ONLY; private record Warm(JavaInspector inspector, SourceSet set, ParseResult pr, Set recomputed, @@ -146,16 +152,16 @@ private Warm warmAfterCircleEdit() throws IOException { TypeInfo type = info instanceof TypeInfo ti ? ti : info.typeInfo(); if (type != null && type.primaryType() == circle) seed.add(info); } - Set recomputed = new java.util.TreeSet<>(); + Set recomputed = new TreeSet<>(); Consumer clearBeforeRecompute = info -> { recomputed.add(info.fullyQualifiedName()); - io.codelaser.maddi.modification.prepwork.ClearDerived.element(info); + ClearDerived.element(info); }; IteratingAnalyzerImpl analyzer = new IteratingAnalyzerImpl(inspector, configuration()); analyzer.analyze(order, ccg.graph(), seed, clearBeforeRecompute); // the scope it reports, which its messages are about, is what it cleared and analysed assertEquals(recomputed, analyzer.lastScope().stream().map(Info::fullyQualifiedName) - .collect(java.util.stream.Collectors.toCollection(java.util.TreeSet::new))); + .collect(Collectors.toCollection(TreeSet::new))); return new Warm(inspector, set, pr, recomputed, before); } @@ -167,8 +173,8 @@ public void testHierarchyUpward() throws IOException { "the upward flow pulls in the kept Shape.area(), and from there its user: " + warm.recomputed()); // prep's registry of implementations survives the clear-before-recompute, and names the live Circle.area() MethodInfo area = warm.pr().findType("s.Shape").findUniqueMethod("area", 0); - var implementations = area.analysis().getOrNull(io.codelaser.maddi.cst.impl.analysis.PropertyImpl.IMPLEMENTATIONS, - io.codelaser.maddi.cst.impl.analysis.ValueImpl.SetOfMethodInfoImpl.class); + var implementations = area.analysis().getOrNull(PropertyImpl.IMPLEMENTATIONS, + ValueImpl.SetOfMethodInfoImpl.class); assertNotNull(implementations, "IMPLEMENTATIONS is prep's, the analyzer's clear must leave it"); MethodInfo liveArea = warm.pr().findType("s.Circle").findUniqueMethod("area", 0); assertSame(liveArea, implementations.methodInfoSet().iterator().next()); @@ -192,7 +198,7 @@ public void testWarmEqualsCold() throws IOException { /* per type, the element lines that differ: "-" cold only, "+" warm only */ private static void assertSameAnalysis(Map cold, Map warm, String what) { StringBuilder sb = new StringBuilder(); - for (String type : new java.util.TreeSet<>(cold.keySet())) { + for (String type : new TreeSet<>(cold.keySet())) { List c = List.of(cold.get(type).split("\n")); List w = List.of(String.valueOf(warm.get(type)).split("\n")); if (c.equals(w)) continue; diff --git a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestWarmAnalysisWithCarry.java b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestWarmAnalysisWithCarry.java index ec0d6e57d..c71b3e5d7 100644 --- a/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestWarmAnalysisWithCarry.java +++ b/maddi-run-analysis/src/test/java/io/codelaser/maddi/run/openjdkmain/TestWarmAnalysisWithCarry.java @@ -40,6 +40,7 @@ import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.callgraph.ComputeCallGraph; import io.codelaser.maddi.callgraph.PrimaryTypeUseGraph; +import io.codelaser.maddi.cst.api.analysis.Property; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.Info; import io.codelaser.maddi.cst.api.info.InfoMapView; @@ -105,7 +106,7 @@ public class Holder { } """; - private static final Predicate OUTPUT = + private static final Predicate OUTPUT = AnalysisFingerprint.ANALYZER_OUTPUT_ONLY; private record Warm(JavaInspector inspector, SourceSet set, ParseResult pr, Set recomputed, diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/K2RealmTestBootstrap.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/K2RealmTestBootstrap.java index 250f013eb..ec72e535e 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/K2RealmTestBootstrap.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/K2RealmTestBootstrap.java @@ -17,6 +17,7 @@ package io.codelaser.maddi.run.kotlinmain; +import java.io.IOException; import java.io.UncheckedIOException; import org.junit.platform.launcher.LauncherSession; @@ -41,7 +42,7 @@ public class K2RealmTestBootstrap implements LauncherSessionListener { public void launcherSessionOpened(LauncherSession session) { try { K2Realm.installIfAbsent(); - } catch (java.io.IOException e) { + } catch (IOException e) { throw new UncheckedIOException( "the test JVM could not build the K2 realm; see maddi-run-kotlin/build.gradle.kts, which" + " passes -D" + K2Realm.CLASSPATH_PROPERTY + " from the k2Runtime configuration", e); diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinAnalysisRoundTrip.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinAnalysisRoundTrip.java index 3628b1f14..4b2b0a5e3 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinAnalysisRoundTrip.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinAnalysisRoundTrip.java @@ -22,6 +22,7 @@ import java.nio.file.Files; import java.nio.file.Path; +import java.util.Comparator; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -212,7 +213,7 @@ public class JBox { */ private static String fingerprint(TypeInfo type) { return type.methodStream() - .sorted(java.util.Comparator.comparing(MethodInfo::name)) + .sorted(Comparator.comparing(MethodInfo::name)) .map(m -> m.name() + " nonModifying=" + nonModifying(m) + " params=" + m.parameters().stream() .map(p -> p.simpleName() + ":" + p.analysis() diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinArchiveAttaches.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinArchiveAttaches.java index 95b0ccac9..423843aa4 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinArchiveAttaches.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinArchiveAttaches.java @@ -18,6 +18,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; +import java.io.File; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; @@ -84,7 +85,7 @@ fun has(l: List, s: String?) = s in l SourceSet kotlinSet = new SourceSetImpl.Builder().setName("kotlin/main") .setSourceDirectories(List.of(kDir)).setUri(kDir.toUri()).setDependencies(List.of(javaSet)).build(); String cp = System.getProperty("maddi.k2.classpath", ""); - String jar = Stream.of(cp.split(java.io.File.pathSeparator)) + String jar = Stream.of(cp.split(File.pathSeparator)) .filter(p -> Path.of(p).getFileName().toString().matches("kotlin-stdlib-\\d[^-]*\\.jar")) .findFirst().orElseThrow(() -> new AssertionError("no kotlin-stdlib on -Dmaddi.k2.classpath")); MixedProjectInspector.Result parsed = new MixedProjectInspector().parse(new InputConfigurationImpl.Builder() diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinCollectionReadsVsJava.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinCollectionReadsVsJava.java index 0baa50e3b..8fe5a441f 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinCollectionReadsVsJava.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinCollectionReadsVsJava.java @@ -18,6 +18,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; +import java.io.File; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; @@ -339,7 +340,7 @@ private static TypeInfo type(Set types, String fqn) { private static String kotlinStdlibJar() { String cp = System.getProperty("maddi.k2.classpath", ""); - return Stream.of(cp.split(java.io.File.pathSeparator)) + return Stream.of(cp.split(File.pathSeparator)) .filter(p -> Path.of(p).getFileName().toString().matches("kotlin-stdlib-\\d[^-]*\\.jar")) .findFirst() .orElseThrow(() -> new AssertionError( diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinContractsVsJava.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinContractsVsJava.java index 383202131..c81ca16a9 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinContractsVsJava.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinContractsVsJava.java @@ -31,6 +31,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import io.codelaser.maddi.annotation.NotModified; import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.cst.api.element.SourceSet; import io.codelaser.maddi.cst.api.info.Info; @@ -224,7 +225,7 @@ private static String verdict(MethodInfo method) { /** The jar holding io.codelaser.maddi.annotation, located from a class it contains. */ private static Path annotationJar() throws Exception { - return Path.of(io.codelaser.maddi.annotation.NotModified.class.getProtectionDomain().getCodeSource() + return Path.of(NotModified.class.getProtectionDomain().getCodeSource() .getLocation().toURI()); } diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinLambdaVsJavaLambda.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinLambdaVsJavaLambda.java index c1fe1701c..8ead4662c 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinLambdaVsJavaLambda.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinLambdaVsJavaLambda.java @@ -19,10 +19,14 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; +import java.io.File; +import java.io.IOException; +import java.io.UncheckedIOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; import java.util.Set; +import java.util.jar.JarFile; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -207,15 +211,15 @@ private static PlaceholderCensus censusOf(Path kDir, Path jDir, boolean withStdl */ private static String kotlinStdlibJar() { String cp = System.getProperty("maddi.k2.classpath", ""); - String jar = Stream.of(cp.split(java.io.File.pathSeparator)) + String jar = Stream.of(cp.split(File.pathSeparator)) .filter(p -> Path.of(p).getFileName().toString().matches("kotlin-stdlib-\\d[^-]*\\.jar")) .findFirst() .orElseThrow(() -> new AssertionError( "no kotlin-stdlib jar on -Dmaddi.k2.classpath (" + cp + "); this test cannot run")); - try (java.util.jar.JarFile jf = new java.util.jar.JarFile(jar)) { + try (JarFile jf = new JarFile(jar)) { assertNotNull(jf.getEntry("kotlin/collections/CollectionsKt.class"), jar + " is not the Kotlin stdlib"); - } catch (java.io.IOException e) { - throw new java.io.UncheckedIOException(e); + } catch (IOException e) { + throw new UncheckedIOException(e); } return jar; } diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinLazyVsJavaLazy.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinLazyVsJavaLazy.java index 54d12af87..ab93b1d72 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinLazyVsJavaLazy.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinLazyVsJavaLazy.java @@ -32,6 +32,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; +import io.codelaser.maddi.annotation.ImmutableContainer; import io.codelaser.maddi.callgraph.ComputeAnalysisOrder; import io.codelaser.maddi.cst.api.analysis.Value; import io.codelaser.maddi.cst.api.element.SourceSet; @@ -301,7 +302,7 @@ private Analyzed analyze(Path tmp) throws Exception { // loaded 'jar:file:...!/...' class file by looking the JAR'S FILE NAME up among the source-set names, // and sourceSetOf is what derives that name (tail(uri)). Naming the set anything friendlier makes every // annotation type resolve to "off-classpath", after which the contract silently never arrives. - SourceSet annotations = SourceSetImpl.sourceSetOf(io.codelaser.maddi.annotation.ImmutableContainer.class); + SourceSet annotations = SourceSetImpl.sourceSetOf(ImmutableContainer.class); SourceSet javaSet = new SourceSetImpl.Builder().setName("java/main") .setSourceDirectories(List.of(jDir)).setUri(jDir.toUri()) .setDependencies(List.of(annotations)).build(); diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinPredicatesVsJava.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinPredicatesVsJava.java index 7fa5104b1..efcd1339e 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinPredicatesVsJava.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinPredicatesVsJava.java @@ -19,10 +19,14 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; +import java.io.File; +import java.io.IOException; +import java.io.UncheckedIOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; import java.util.Set; +import java.util.jar.JarFile; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -152,15 +156,15 @@ private static TypeInfo type(Set types, String fqn) { private static String kotlinStdlibJar() { String cp = System.getProperty("maddi.k2.classpath", ""); - String jar = Stream.of(cp.split(java.io.File.pathSeparator)) + String jar = Stream.of(cp.split(File.pathSeparator)) .filter(p -> Path.of(p).getFileName().toString().matches("kotlin-stdlib-\\d[^-]*\\.jar")) .findFirst() .orElseThrow(() -> new AssertionError( "no kotlin-stdlib jar on -Dmaddi.k2.classpath (" + cp + "); this test cannot run")); - try (java.util.jar.JarFile jf = new java.util.jar.JarFile(jar)) { + try (JarFile jf = new JarFile(jar)) { assertNotNull(jf.getEntry("kotlin/collections/CollectionsKt.class"), jar + " is not the Kotlin stdlib"); - } catch (java.io.IOException e) { - throw new java.io.UncheckedIOException(e); + } catch (IOException e) { + throw new UncheckedIOException(e); } return jar; } diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinScopeFunctionsVsJava.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinScopeFunctionsVsJava.java index c8c869079..3734b23f3 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinScopeFunctionsVsJava.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestKotlinScopeFunctionsVsJava.java @@ -18,6 +18,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; +import java.io.File; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; @@ -209,7 +210,7 @@ private static TypeInfo type(Set types, String fqn) { private static String kotlinStdlibJar() { String cp = System.getProperty("maddi.k2.classpath", ""); - return Stream.of(cp.split(java.io.File.pathSeparator)) + return Stream.of(cp.split(File.pathSeparator)) .filter(p -> Path.of(p).getFileName().toString().matches("kotlin-stdlib-\\d[^-]*\\.jar")) .findFirst() .orElseThrow(() -> new AssertionError( diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestLoweredShapesVsJava.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestLoweredShapesVsJava.java index ce879f7e6..bbb169569 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestLoweredShapesVsJava.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestLoweredShapesVsJava.java @@ -21,6 +21,7 @@ import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -437,7 +438,7 @@ private static MethodInfo method(TypeInfo type, String name) { /** The fully qualified names of the methods this method's tree holds a method reference to. */ private static List referencedMethods(MethodInfo method) { - List found = new java.util.ArrayList<>(); + List found = new ArrayList<>(); method.methodBody().visit(e -> { if (e instanceof MethodReference mr) found.add(mr.methodInfo().fullyQualifiedName()); return true; diff --git a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestOneEntryPointAnalysis.java b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestOneEntryPointAnalysis.java index 3ceae763c..07a6d673a 100644 --- a/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestOneEntryPointAnalysis.java +++ b/maddi-run-kotlin-analysis/src/test/java/io/codelaser/maddi/run/kotlinmain/TestOneEntryPointAnalysis.java @@ -23,11 +23,13 @@ import java.io.File; import java.nio.file.Files; import java.nio.file.Path; +import java.util.Arrays; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import org.apache.commons.cli.Option; +import org.apache.commons.cli.Options; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -49,7 +51,7 @@ */ public class TestOneEntryPointAnalysis { - private static Set longOptions(org.apache.commons.cli.Options options) { + private static Set longOptions(Options options) { return options.getOptions().stream().map(Option::getLongOpt).collect(Collectors.toUnmodifiableSet()); } @@ -121,7 +123,7 @@ private static String[] kotlinProject(Path tmp) throws Exception { } private static String[] concat(String[] first, String... rest) { - String[] all = java.util.Arrays.copyOf(first, first.length + rest.length); + String[] all = Arrays.copyOf(first, first.length + rest.length); System.arraycopy(rest, 0, all, first.length, rest.length); return all; }