From 080325b5f697fefc22d139da5c13d647084369dd Mon Sep 17 00:00:00 2001 From: Julian Dolby Date: Tue, 25 Jun 2013 11:57:37 -0400 Subject: [PATCH] merge --- .../cast/java/polyglot/test/Activator.java | 2 + .../wala/cast/java/test/PolyglotJLexTest.java | 1 + .../cast/java/test/PolyglotJavaIRTest.java | 1 + .../java/test/PolyglotSyncDuplicatorTest.java | 4 + .../translator/polyglot/AscriptionGoal.java | 1 + .../cast/java/translator/polyglot/IRGoal.java | 1 + .../polyglot/JavaIRTranslatorExtension.java | 4 + .../translator/polyglot/ModuleSource.java | 3 + .../polyglot/PolyglotClassLoaderFactory.java | 1 + .../polyglot/PolyglotIdentityMapper.java | 3 + .../polyglot/PolyglotJava2CAstTranslator.java | 184 ++++++++++ .../PolyglotJavaSourceAnalysisEngine.java | 1 + .../polyglot/PolyglotSourceLoaderImpl.java | 1 + .../PolyglotSourceModuleTranslator.java | 1 + .../polyglot/PolyglotTypeDictionary.java | 5 + .../PolyglotUnwoundIRTranslatorExtension.java | 4 +- .../.settings/org.eclipse.jdt.core.prefs | 35 +- .../src/AnonymousClass.java | 15 +- .../src/FunkySupers.java | 3 +- .../src/Inheritance1.java | 2 + .../src/InnerClassLexicalReads.java | 3 +- .../src/InterfaceTest1.java | 1 + .../src/MiniaturSliceBug.java | 4 + .../src/SimpleCalls.java | 3 +- .../src/Thread1.java | 1 + .../src/foo/SimpleNames.java | 3 +- .../world/ConstructorsAndInitializers.java | 2 +- .../src/foo/bar/hello/world/InnerClasses.java | 6 +- .../foo/bar/hello/world/MethodMadness.java | 2 +- .../AnonGeneNullarySimple.java | 3 +- .../javaonepointfive/AnonymousGenerics.java | 12 +- .../src/javaonepointfive/Cocovariant.java | 2 + .../CustomGenericsAndFields.java | 9 +- .../GenericMemberClasses.java | 9 +- .../MoreOverriddenGenerics.java | 6 +- .../javaonepointfive/NotSoSimpleEnums.java | 12 +- .../OverridesOnePointFour.java | 3 +- .../javaonepointfive/VarargsCovariant.java | 3 +- .../javaonepointfive/VarargsOverriding.java | 3 +- .../com/ibm/wala/cast/java/test/JLexTest.java | 2 + .../ibm/wala/cast/java/test/JavaIRTests.java | 12 + .../ibm/wala/cast/java/test/TestPlugin.java | 6 +- .../ibm/wala/cast/java/JavaSourcePlugin.java | 6 +- .../typeInference/AstJavaTypeInference.java | 9 + .../java/client/JavaSourceAnalysisEngine.java | 6 + .../ast/SynchronizedBlockDuplicator.java | 8 + ...AstJavaSSAPropagationCallGraphBuilder.java | 15 + .../JavaScopeMappingInstanceKeys.java | 1 + .../callgraph/JavaSourceAnalysisScope.java | 1 + .../cast/java/ipa/modref/AstJavaModRef.java | 5 + .../cast/java/ipa/slicer/AstJavaSlicer.java | 4 + .../java/loader/JavaSourceLoaderImpl.java | 44 +++ .../AstJavaAbstractInstructionVisitor.java | 2 + .../java/ssa/AstJavaInvokeInstruction.java | 3 + .../ssa/AstJavaNewEnclosingInstruction.java | 5 + .../java/ssa/EnclosingObjectReference.java | 10 + .../translator/JavaCAst2IRTranslator.java | 26 ++ .../java/translator/JavaProcedureEntity.java | 1 + .../cast/java/types/JavaPrimitiveTypeMap.java | 2 + .../ibm/wala/cast/java/types/JavaType.java | 1 + .../nu_validator/NuValidatorHtmlParser.java | 20 + .../test/TestAjaxsltCallGraphShapeRhino.java | 1 + .../js/test/TestArgumentSensitivityRhino.java | 3 +- .../TestCorrelatedPairExtractionRhino.java | 6 +- .../js/test/TestForInBodyExtractionRhino.java | 3 +- .../cast/js/test/TestForInLoopHackRhino.java | 3 +- .../cast/js/test/TestJQueryExamplesRhino.java | 3 +- .../TestMediawikiCallGraphShapeRhino.java | 1 + .../wala/cast/js/test/TestRhinoSourceMap.java | 1 - .../test/TestSimpleCallGraphShapeRhino.java | 1 + .../TestSimplePageCallGraphShapeRhino.java | 9 +- com.ibm.wala.cast.js.rhino/.classpath | 2 +- .../META-INF/MANIFEST.MF | 2 +- com.ibm.wala.cast.js.rhino/build.properties | 2 +- .../js/translator/CAstRhinoTranslator.java | 3 +- .../CAstRhinoTranslatorFactory.java | 3 +- .../js/translator/RhinoToAstTranslator.java | 19 + .../com/ibm/wala/js/rhino/Activator.java | 6 +- .../com/ibm/wala/cast/js/test/CAstDumper.java | 3 +- .../cast/js/test/JSCallGraphBuilderUtil.java | 3 + .../js/test/TestCorrelatedPairExtraction.java | 2 +- .../cast/js/test/TestForInBodyExtraction.java | 2 +- .../cast/js/test/TestJSCallGraphShape.java | 1 + .../js/test/TestSimplePageCallGraphShape.java | 2 + .../ibm/wala/cast/js/JavaScriptPlugin.java | 6 +- .../typeInference/JSTypeInference.java | 10 + .../fieldbased/flowgraph/FlowGraph.java | 1 + .../vertices/AbstractVertexVisitor.java | 24 +- .../ibm/wala/cast/js/cfg/JSInducedCFG.java | 16 + .../js/client/JavaScriptAnalysisEngine.java | 6 + .../cast/js/html/CompositeFileMapping.java | 6 - .../cast/js/html/DomLessSourceExtractor.java | 7 +- .../wala/cast/js/html/EmptyFileMapping.java | 7 - .../ibm/wala/cast/js/html/FileMapping.java | 4 - .../cast/js/html/IdentityUrlResolver.java | 2 + .../wala/cast/js/html/IncludedPosition.java | 9 + .../wala/cast/js/html/NestedRangeMapping.java | 6 - .../wala/cast/js/html/RangeFileMapping.java | 9 +- .../ibm/wala/cast/js/html/SourceRegion.java | 9 + .../ibm/wala/cast/js/html/UnicodeReader.java | 2 + .../com/ibm/wala/cast/js/html/WebUtil.java | 1 + .../js/html/jericho/JerichoHtmlParser.java | 3 +- .../wala/cast/js/html/jericho/JerichoTag.java | 15 +- .../ipa/callgraph/ArgumentSpecialization.java | 8 + .../js/ipa/callgraph/GlobalObjectKey.java | 2 + .../cast/js/ipa/callgraph/JSCFABuilder.java | 1 + .../cast/js/ipa/callgraph/JSCallGraph.java | 4 + .../js/ipa/callgraph/JSCallGraphUtil.java | 6 + .../JSSSAPropagationCallGraphBuilder.java | 42 +++ .../callgraph/JSSyntheticParameterKey.java | 3 + .../JavaScriptConstructTargetSelector.java | 2 + .../JavaScriptConstructorInstanceKeys.java | 5 + .../ipa/callgraph/JavaScriptEntryPoints.java | 1 + ...avaScriptFunctionApplyContextSelector.java | 3 + ...vaScriptFunctionDotCallTargetSelector.java | 1 + .../JavaScriptScopeMappingInstanceKeys.java | 1 + .../ipa/callgraph/LoadFileTargetSelector.java | 1 + .../ObjectSensitivityContextSelector.java | 2 + .../PropertyNameContextSelector.java | 9 +- .../js/ipa/callgraph/SelectiveCPAContext.java | 1 + .../ipa/callgraph/TransitivePrototypeKey.java | 3 + .../correlations/CorrelationFinder.java | 1 + .../extraction/ClosureExtractor.java | 6 +- .../CorrelatedPairExtractorFactory.java | 2 +- .../extraction/ExtractedFunction.java | 45 ++- .../correlations/extraction/NodePos.java | 3 +- .../JavaScriptSummarizedFunction.java | 2 + .../js/ipa/summaries/JavaScriptSummary.java | 2 + .../cast/js/loader/JSCallSiteReference.java | 3 + .../wala/cast/js/loader/JavaScriptLoader.java | 119 ++++++ .../js/loader/JavaScriptLoaderFactory.java | 2 + .../js/ssa/JSAbstractInstructionVisitor.java | 7 + .../cast/js/ssa/JavaScriptCheckReference.java | 3 + .../cast/js/ssa/JavaScriptInstanceOf.java | 5 + .../wala/cast/js/ssa/JavaScriptInvoke.java | 7 + .../cast/js/ssa/JavaScriptPropertyRead.java | 4 + .../cast/js/ssa/JavaScriptPropertyWrite.java | 5 + .../js/ssa/JavaScriptTypeOfInstruction.java | 4 + .../cast/js/ssa/JavaScriptWithRegion.java | 2 + .../cast/js/translator/JSAstTranslator.java | 26 ++ ...aScriptLoopUnwindingTranslatorFactory.java | 4 +- .../JavaScriptTranslatorToCAst.java | 15 + .../js/translator/PropertyReadExpander.java | 13 + .../cast/js/translator/RangePosition.java | 9 + .../com/ibm/wala/cast/js/vis/JsPaPanel.java | 3 +- .../ibm/wala/cast/test/TestCAstPattern.java | 1 + .../typeInference/AstTypeInference.java | 10 + .../callgraph/ArgumentInstanceContext.java | 1 + .../wala/cast/ipa/callgraph/AstCallGraph.java | 4 + ...ntextInsensitiveSSAContextInterpreter.java | 2 + .../ipa/callgraph/AstGlobalPointerKey.java | 3 + .../AstSSAPropagationCallGraphBuilder.java | 75 ++++ .../cast/ipa/callgraph/CAstAnalysisScope.java | 10 + .../cast/ipa/callgraph/CAstCallGraphUtil.java | 2 +- .../ipa/callgraph/CrossLanguageCallGraph.java | 8 + .../CrossLanguageClassTargetSelector.java | 1 + .../CrossLanguageContextSelector.java | 2 + .../callgraph/CrossLanguageInstanceKeys.java | 5 + .../CrossLanguageMethodTargetSelector.java | 1 + ...anguageSSAPropagationCallGraphBuilder.java | 7 + .../callgraph/DelegatingAstPointerKeys.java | 10 + .../MiscellaneousHacksContextSelector.java | 2 + .../callgraph/ObjectPropertyCatalogKey.java | 3 + .../callgraph/ReflectedFieldPointerKey.java | 7 + .../callgraph/ScopeMappingInstanceKeys.java | 11 + .../cast/ipa/callgraph/ScriptEntryPoints.java | 5 + .../StandardFunctionTargetSelector.java | 1 + .../ipa/cha/CrossLanguageClassHierarchy.java | 30 ++ .../wala/cast/ipa/lexical/LexicalModRef.java | 2 + .../ibm/wala/cast/ipa/modref/AstModRef.java | 19 + .../ibm/wala/cast/ir/cfg/AstInducedCFG.java | 20 + .../ibm/wala/cast/ir/cfg/DelegatingCFG.java | 13 + .../cast/ir/ssa/AbstractLexicalInvoke.java | 6 + .../cast/ir/ssa/AbstractReflectiveGet.java | 6 + .../cast/ir/ssa/AbstractReflectivePut.java | 4 + .../wala/cast/ir/ssa/AssignInstruction.java | 3 + .../ir/ssa/AstAbstractInstructionVisitor.java | 9 + .../cast/ir/ssa/AstAssertInstruction.java | 8 + .../ibm/wala/cast/ir/ssa/AstConstants.java | 2 + .../wala/cast/ir/ssa/AstEchoInstruction.java | 10 + .../ibm/wala/cast/ir/ssa/AstGlobalRead.java | 5 + .../ibm/wala/cast/ir/ssa/AstGlobalWrite.java | 5 + .../cast/ir/ssa/AstIsDefinedInstruction.java | 12 + .../wala/cast/ir/ssa/AstLexicalAccess.java | 6 + .../ibm/wala/cast/ir/ssa/AstLexicalRead.java | 7 + .../ibm/wala/cast/ir/ssa/AstLexicalWrite.java | 7 + .../ir/ssa/EachElementGetInstruction.java | 4 + .../ir/ssa/EachElementHasNextInstruction.java | 4 + ...xedParametersLexicalInvokeInstruction.java | 3 + .../MultiReturnValueInvokeInstruction.java | 2 + .../cast/ir/ssa/analysis/LiveAnalysis.java | 19 + .../ir/translator/AbstractClassEntity.java | 5 + .../ir/translator/AbstractCodeEntity.java | 5 + .../ir/translator/AbstractDataEntity.java | 7 + .../cast/ir/translator/AbstractEntity.java | 5 + .../ir/translator/AbstractFieldEntity.java | 5 + .../ir/translator/AbstractGlobalEntity.java | 5 + .../ir/translator/AbstractScriptEntity.java | 7 + .../cast/ir/translator/AstTranslator.java | 342 ++++++++++++++++++ .../ir/translator/ExposedNamesCollector.java | 2 + .../cast/ir/translator/TranslatorToCAst.java | 14 + .../com/ibm/wala/cast/loader/AstClass.java | 26 ++ .../cast/loader/AstDynamicPropertyClass.java | 14 + .../com/ibm/wala/cast/loader/AstField.java | 13 + .../wala/cast/loader/AstFunctionClass.java | 27 ++ .../com/ibm/wala/cast/loader/AstMethod.java | 25 ++ .../wala/cast/loader/CAstAbstractLoader.java | 13 + .../cast/loader/CAstAbstractModuleLoader.java | 1 + .../cast/loader/SingleClassLoaderFactory.java | 1 + .../com/ibm/wala/cast/plugin/AstPlugin.java | 6 +- .../com/ibm/wala/cast/tree/AstPlugin.java | 6 +- .../wala/cast/tree/CAstControlFlowMap.java | 7 + .../wala/cast/tree/CAstMemberReference.java | 5 + .../com/ibm/wala/cast/tree/CAstQualifier.java | 2 + .../com/ibm/wala/cast/tree/CAstSymbol.java | 1 + .../java/com/ibm/wala/cast/tree/CAstType.java | 2 + .../wala/cast/tree/CAstTypeDictionary.java | 1 + .../tree/impl/AbstractSourcePosition.java | 4 + .../tree/impl/CAstControlFlowRecorder.java | 8 + .../com/ibm/wala/cast/tree/impl/CAstImpl.java | 30 ++ .../tree/impl/CAstNodeTypeMapRecorder.java | 2 + .../ibm/wala/cast/tree/impl/CAstOperator.java | 5 + .../tree/impl/CAstSourcePositionRecorder.java | 29 +- .../wala/cast/tree/impl/CAstSymbolImpl.java | 1 + .../cast/tree/impl/CAstSymbolImplBase.java | 6 + .../tree/impl/CAstTypeDictionaryImpl.java | 3 + .../wala/cast/tree/impl/CAstValueImpl.java | 6 + .../wala/cast/tree/impl/DelegatingEntity.java | 16 + .../cast/tree/impl/LineNumberPosition.java | 9 + .../com/ibm/wala/cast/tree/pattern/Alt.java | 1 + .../ibm/wala/cast/tree/pattern/AnyNode.java | 3 +- .../wala/cast/tree/pattern/NodeOfKind.java | 3 +- .../cast/tree/rewrite/AstLoopUnwinder.java | 8 + .../cast/tree/rewrite/CAstBasicRewriter.java | 5 + .../wala/cast/tree/rewrite/CAstCloner.java | 1 + .../wala/cast/tree/rewrite/CAstRewriter.java | 17 + .../tree/visit/DelegatingCAstVisitor.java | 129 +++++++ .../com/ibm/wala/cast/util/CAstFunctions.java | 6 + .../com/ibm/wala/cast/util/CAstPattern.java | 3 + .../com/ibm/wala/cast/util/SourceBuffer.java | 25 +- .../src/demandpa/ArraySet.java | 1 + .../src/demandpa/DummyHashMap.java | 2 + .../src/demandpa/DummyLinkedList.java | 1 + .../src/multiTypes/Foo.java | 1 + .../src/recurse/NList.java | 13 + .../src/reflection/Reflect5.java | 3 +- .../src/reflection/Reflect6.java | 3 +- com.ibm.wala.core.testdata/src/slice/B.java | 1 + .../core/tests/basic/FloydWarshallTest.java | 10 + .../core/tests/basic/GraphDataflowTest.java | 10 + .../wala/core/tests/basic/PathFinderTest.java | 1 + .../core/tests/callGraph/CallGraphTest.java | 18 + .../tests/callGraph/PiNodeCallGraphTest.java | 1 - .../wala/core/tests/cha/SourceMapTest.java | 5 + .../ContextInsensitiveReachingDefs.java | 5 + .../ContextSensitiveReachingDefs.java | 15 + .../dataflow/IntraprocReachingDefs.java | 5 + .../wala/examples/drivers/PDFCallGraph.java | 1 + .../com/ibm/wala/examples/drivers/PDFSDG.java | 2 + .../ibm/wala/examples/drivers/PDFSlice.java | 2 + .../examples/drivers/PDFTypeHierarchy.java | 1 + .../analysis/pointers/BasicHeapGraph.java | 43 +++ .../ibm/wala/analysis/pointers/HeapGraph.java | 3 + .../ClassFactoryContextInterpreter.java | 10 + .../ClassFactoryContextSelector.java | 2 + .../ClassNewInstanceContextInterpreter.java | 10 + .../ClassNewInstanceContextSelector.java | 2 + .../analysis/reflection/CloneInterpreter.java | 10 + .../reflection/FactoryBypassInterpreter.java | 13 + .../reflection/FactoryContextSelector.java | 2 + .../reflection/GetClassContextInterpeter.java | 10 + .../reflection/GetClassContextSelector.java | 2 + .../IllegalArgumentExceptionContext.java | 1 + .../JavaLangClassContextInterpreter.java | 10 + .../JavaLangClassContextSelector.java | 2 + .../analysis/reflection/JavaTypeContext.java | 1 + .../ReflectionContextInterpreter.java | 10 + .../reflection/ReflectionContextSelector.java | 2 + .../ReflectiveInvocationInterpreter.java | 10 + .../ReflectiveInvocationSelector.java | 2 + .../stackMachine/AbstractIntStackMachine.java | 10 + .../analysis/typeInference/TypeInference.java | 5 + .../analysis/typeInference/TypeVariable.java | 1 + .../src/com/ibm/wala/cfg/AbstractCFG.java | 30 ++ .../src/com/ibm/wala/cfg/InducedCFG.java | 11 + .../src/com/ibm/wala/cfg/ShrikeCFG.java | 11 + .../wala/cfg/cdg/ControlDependenceGraph.java | 12 + .../com/ibm/wala/classLoader/ArrayClass.java | 28 ++ .../BinaryDirectoryTreeModule.java | 2 +- .../ibm/wala/classLoader/BytecodeClass.java | 5 +- .../classLoader/ClassLoaderFactoryImpl.java | 1 + .../ibm/wala/classLoader/ClassLoaderImpl.java | 15 + .../wala/classLoader/DirectoryTreeModule.java | 1 + .../com/ibm/wala/classLoader/FieldImpl.java | 12 + .../src/com/ibm/wala/classLoader/IField.java | 1 + .../com/ibm/wala/classLoader/JVMClass.java | 6 + .../ibm/wala/classLoader/JarFileModule.java | 1 + .../ibm/wala/classLoader/JavaLanguage.java | 60 +++ .../ibm/wala/classLoader/LanguageImpl.java | 3 + .../com/ibm/wala/classLoader/ModuleEntry.java | 5 + .../wala/classLoader/NestedJarFileModule.java | 1 + .../classLoader/ResourceJarFileModule.java | 1 + .../ibm/wala/classLoader/ShrikeBTMethod.java | 25 ++ .../ibm/wala/classLoader/ShrikeCTMethod.java | 6 + .../ibm/wala/classLoader/ShrikeIRFactory.java | 2 + .../SourceDirectoryTreeModule.java | 2 +- .../ibm/wala/classLoader/SourceURLModule.java | 3 + .../ibm/wala/classLoader/SyntheticClass.java | 11 + .../ibm/wala/classLoader/SyntheticMethod.java | 28 ++ .../wala/client/AbstractAnalysisEngine.java | 6 + .../wala/client/AbstractEngineStopwatch.java | 4 + .../dataflow/IFDS/BackwardsSupergraph.java | 41 +++ .../wala/dataflow/IFDS/ICFGSupergraph.java | 39 ++ .../dataflow/IFDS/IdentityFlowFunction.java | 2 + .../dataflow/IFDS/IdentityFlowFunctions.java | 5 + .../wala/dataflow/IFDS/KillEverything.java | 1 + .../PartiallyBalancedTabulationProblem.java | 1 + .../dataflow/IFDS/SingletonFlowFunction.java | 2 + .../wala/dataflow/IFDS/TabulationSolver.java | 17 + .../wala/dataflow/IFDS/UnorderedDomain.java | 1 + .../dataflow/IFDS/VectorGenFlowFunction.java | 2 + .../dataflow/IFDS/VectorKillFlowFunction.java | 2 + .../demandpa/alg/AbstractDemandPointsTo.java | 3 + .../alg/ContextSensitiveStateMachine.java | 22 ++ .../alg/DemandRefinementPointsTo.java | 24 ++ .../wala/demandpa/alg/IntraProcFilter.java | 3 + .../demandpa/alg/SimpleDemandPointsTo.java | 1 + .../demandpa/alg/ThisFilteringHeapModel.java | 14 + .../AbstractRefinementPolicy.java | 5 + .../refinepolicy/AlwaysRefineCGPolicy.java | 2 + .../AlwaysRefineFieldsPolicy.java | 2 + .../DelegatingFieldRefinePolicy.java | 2 + .../refinepolicy/ManualCGRefinePolicy.java | 2 + .../alg/refinepolicy/ManualFieldPolicy.java | 2 + .../refinepolicy/ManualRefinementPolicy.java | 1 + .../alg/refinepolicy/NeverRefineCGPolicy.java | 2 + .../refinepolicy/NeverRefineFieldsPolicy.java | 2 + .../SinglePassRefinementPolicy.java | 1 + .../TunedFieldRefinementPolicy.java | 2 + .../refinepolicy/TunedRefinementPolicy.java | 1 + .../alg/statemachine/DummyStateMachine.java | 3 + .../flowgraph/AbstractDemandFlowGraph.java | 4 + .../demandpa/flowgraph/AbstractFlowGraph.java | 12 + .../flowgraph/AbstractFlowLabelVisitor.java | 16 + .../demandpa/flowgraph/AssignBarLabel.java | 4 + .../flowgraph/AssignGlobalBarLabel.java | 3 + .../demandpa/flowgraph/AssignGlobalLabel.java | 3 + .../wala/demandpa/flowgraph/AssignLabel.java | 4 + .../flowgraph/DemandPointerFlowGraph.java | 1 + .../flowgraph/DemandValueFlowGraph.java | 1 + .../demandpa/flowgraph/GetFieldBarLabel.java | 3 + .../demandpa/flowgraph/GetFieldLabel.java | 3 + .../demandpa/flowgraph/MatchBarLabel.java | 3 + .../wala/demandpa/flowgraph/MatchLabel.java | 3 + .../wala/demandpa/flowgraph/NewBarLabel.java | 3 + .../ibm/wala/demandpa/flowgraph/NewLabel.java | 3 + .../demandpa/flowgraph/ParamBarLabel.java | 3 + .../wala/demandpa/flowgraph/ParamLabel.java | 3 + .../demandpa/flowgraph/PutFieldBarLabel.java | 3 + .../demandpa/flowgraph/PutFieldLabel.java | 3 + .../demandpa/flowgraph/ReturnBarLabel.java | 3 + .../wala/demandpa/flowgraph/ReturnLabel.java | 3 + .../ibm/wala/demandpa/util/ArrayContents.java | 12 + .../demandpa/util/PABasedMemoryAccessMap.java | 7 + .../util/PointerParamValueNumIterator.java | 3 + .../demandpa/util/SimpleMemoryAccessMap.java | 7 + .../ibm/wala/escape/FILiveObjectAnalysis.java | 3 + .../wala/escape/LocalLiveRangeAnalysis.java | 1 + .../ibm/wala/escape/TrivialMethodEscape.java | 2 + .../ibm/wala/ipa/callgraph/AnalysisScope.java | 4 +- .../wala/ipa/callgraph/DelegatingContext.java | 1 + .../wala/ipa/callgraph/cha/CHACallGraph.java | 24 ++ ...ntextInsensitiveCHAContextInterpreter.java | 2 + .../callgraph/impl/AbstractRootMethod.java | 9 + .../ipa/callgraph/impl/BasicCallGraph.java | 8 + .../ClassHierarchyClassTargetSelector.java | 1 + .../ClassHierarchyMethodTargetSelector.java | 1 + .../callgraph/impl/ComposedEntrypoints.java | 1 + .../impl/ContextInsensitiveSelector.java | 2 + .../impl/DefaultContextSelector.java | 2 + .../impl/DelegatingContextSelector.java | 2 + .../wala/ipa/callgraph/impl/Everywhere.java | 1 + .../ipa/callgraph/impl/FakeRootClass.java | 29 ++ .../ipa/callgraph/impl/PartialCallGraph.java | 17 + .../com/ibm/wala/ipa/callgraph/impl/Util.java | 5 + .../propagation/AbstractFieldPointerKey.java | 1 + .../propagation/AbstractPointerAnalysis.java | 3 + .../propagation/AbstractPointsToSolver.java | 1 + .../propagation/AbstractTypeInNode.java | 2 + .../callgraph/propagation/AllocationSite.java | 4 + .../propagation/AllocationSiteInNode.java | 1 + .../AllocationSiteInNodeFactory.java | 5 + .../propagation/ArrayContentsKey.java | 1 + .../callgraph/propagation/AssignOperator.java | 1 + .../propagation/ClassBasedInstanceKeys.java | 5 + .../propagation/CloneContextSelector.java | 2 + .../propagation/ConcreteTypeKey.java | 4 + .../callgraph/propagation/ConstantKey.java | 2 + .../propagation/FilteredPointerKey.java | 13 + .../InstanceFieldKeyWithFilter.java | 1 + .../LocalPointerKeyWithFilter.java | 1 + .../propagation/PointerAnalysisImpl.java | 19 + .../propagation/PointerKeyComparator.java | 1 + .../callgraph/propagation/PointsToMap.java | 1 + .../propagation/PointsToSetVariable.java | 1 + .../PropagationCallGraphBuilder.java | 16 + .../propagation/PropagationGraph.java | 34 ++ .../propagation/PropagationSystem.java | 1 + .../propagation/ReceiverInstanceContext.java | 1 + .../ReceiverTypeContextSelector.java | 2 + .../propagation/ReturnValueKeyWithFilter.java | 1 + .../SSAPropagationCallGraphBuilder.java | 8 + .../SmushedAllocationSiteInNode.java | 3 + .../SmushedAllocationSiteInstanceKeys.java | 5 + .../propagation/StringConstantCharArray.java | 2 + .../TargetMethodContextSelector.java | 3 + .../propagation/cfa/CallStringContext.java | 1 + .../cfa/CallStringContextSelector.java | 3 + .../propagation/cfa/CallerContext.java | 1 + .../cfa/ContextInsensitiveSSAInterpreter.java | 4 + .../cfa/DefaultPointerKeyFactory.java | 7 + .../cfa/DefaultSSAInterpreter.java | 4 + .../cfa/DelegatingSSAContextInterpreter.java | 4 + .../cfa/OneLevelSiteContextSelector.java | 2 + .../propagation/cfa/ZeroXInstanceKeys.java | 5 + .../propagation/rta/BasicRTABuilder.java | 1 + .../rta/ContextInsensitiveRTAInterpreter.java | 5 +- .../rta/DefaultRTAInterpreter.java | 6 + .../rta/DelegatingRTAContextInterpreter.java | 6 + .../propagation/rta/TypeBasedHeapModel.java | 14 + .../rta/TypeBasedPointerAnalysis.java | 5 + .../ipa/cfg/AbstractInterproceduralCFG.java | 26 ++ .../ibm/wala/ipa/cfg/BasicBlockInContext.java | 12 + .../ibm/wala/ipa/cfg/ExceptionPrunedCFG.java | 2 + .../src/com/ibm/wala/ipa/cfg/PrunedCFG.java | 39 ++ .../com/ibm/wala/ipa/cha/ClassHierarchy.java | 31 ++ .../modref/DelegatingExtendedHeapModel.java | 15 + .../src/com/ibm/wala/ipa/modref/GenReach.java | 5 + .../src/com/ibm/wala/ipa/modref/ModRef.java | 2 + .../ipa/slicer/ExceptionalReturnCaller.java | 1 + .../ibm/wala/ipa/slicer/HeapReachingDefs.java | 19 + .../wala/ipa/slicer/NormalReturnCaller.java | 1 + .../src/com/ibm/wala/ipa/slicer/PDG.java | 24 ++ .../com/ibm/wala/ipa/slicer/ParamCallee.java | 1 + .../com/ibm/wala/ipa/slicer/ParamCaller.java | 1 + .../ipa/slicer/ReachabilityFunctions.java | 6 + .../src/com/ibm/wala/ipa/slicer/SDG.java | 16 + .../ibm/wala/ipa/slicer/SDGSupergraph.java | 39 ++ .../ibm/wala/ipa/slicer/SliceFunctions.java | 6 + .../src/com/ibm/wala/ipa/slicer/Slicer.java | 6 + .../com/ibm/wala/ipa/slicer/thin/CISDG.java | 26 ++ .../summaries/BypassClassTargetSelector.java | 1 + .../summaries/BypassMethodTargetSelector.java | 1 + .../ipa/summaries/BypassSyntheticClass.java | 18 + .../summaries/BypassSyntheticClassLoader.java | 15 + .../ipa/summaries/SyntheticIRFactory.java | 2 + .../com/ibm/wala/ssa/CompoundPiPolicy.java | 2 + .../src/com/ibm/wala/ssa/ConstantValue.java | 2 + .../src/com/ibm/wala/ssa/DefUse.java | 3 + .../com/ibm/wala/ssa/DefaultIRFactory.java | 2 + .../src/com/ibm/wala/ssa/IR.java | 12 + .../src/com/ibm/wala/ssa/ISSABasicBlock.java | 3 + .../com/ibm/wala/ssa/InstanceOfPiPolicy.java | 2 + .../com/ibm/wala/ssa/NullTestPiPolicy.java | 2 + .../src/com/ibm/wala/ssa/PhiValue.java | 2 + .../src/com/ibm/wala/ssa/SSABuilder.java | 4 + .../src/com/ibm/wala/ssa/SSACFG.java | 60 +++ .../src/com/ibm/wala/ssa/SSAInstruction.java | 23 ++ .../ibm/wala/ssa/SSASwitchInstruction.java | 2 + .../ibm/wala/ssa/ShrikeIndirectionData.java | 5 + .../analysis/ExplodedControlFlowGraph.java | 49 +++ .../ibm/wala/util/scope/JUnitEntryPoints.java | 2 + .../com/ibm/wala/util/warnings/Warning.java | 1 + .../src/com/ibm/wala/viz/PDFViewUtil.java | 2 + .../src/com/ibm/wala/viz/viewer/CgPanel.java | 3 + .../src/com/ibm/wala/viz/viewer/ChaPanel.java | 3 + .../wala/viz/viewer/DualTreeCellRenderer.java | 1 + .../wala/viz/viewer/IrAndSourceViewer.java | 1 + .../src/com/ibm/wala/viz/viewer/IrViewer.java | 1 + .../src/com/ibm/wala/viz/viewer/PaPanel.java | 3 + .../wala/cast/java/jdt/test/Activator.java | 2 + .../java/test/TypeInferenceAssertion.java | 1 + .../jdt/FakeExceptionTypeBinding.java | 58 +++ .../translator/jdt/JDTClassLoaderFactory.java | 1 + .../jdt/JDTJava2CAstTranslator.java | 103 +++++- .../translator/jdt/JDTSourceLoaderImpl.java | 1 + .../jdt/JDTSourceModuleTranslator.java | 2 + .../translator/jdt/JDTTypeDictionary.java | 10 + .../wala/ide/AbstractJavaAnalysisAction.java | 3 + .../com/ibm/wala/ide/jdt/Activator.java | 6 +- .../com/ibm/wala/ide/util/JdtPosition.java | 10 + .../com/ibm/wala/ide/jsdt/Activator.java | 6 +- .../wala/ide/util/JavaScriptHeadlessUtil.java | 3 +- .../com/ibm/wala/ide/util/JsdtUtil.java | 4 + .../com/ibm/wala/eclipse/headless/Main.java | 2 + .../examples/drivers/SWTTypeHierarchy.java | 1 + .../src/com/ibm/wala/ide/test/Activator.java | 2 + .../wala/ide/tests/util/EclipseTestUtil.java | 1 + .../classloader/EclipseSourceFileModule.java | 2 +- .../client/EclipseProjectAnalysisEngine.java | 1 + .../EclipseProjectSourceAnalysisEngine.java | 2 + .../com/ibm/wala/ide/ui/SWTTreeViewer.java | 8 + .../ibm/wala/ide/ui/ViewIFDSLocalAction.java | 2 + .../ibm/wala/ide/util/EclipseProjectPath.java | 1 + .../com/ibm/wala/ide/util/HeadlessUtil.java | 1 + .../ide/util/ProgressMonitorDelegate.java | 4 + .../wala/shrike/copywriter/CopyWriter.java | 1 + .../wala/shrikeBT/ArrayLengthInstruction.java | 1 + .../wala/shrikeBT/ArrayLoadInstruction.java | 3 + .../wala/shrikeBT/ArrayStoreInstruction.java | 2 + .../wala/shrikeBT/BinaryOpInstruction.java | 5 + .../wala/shrikeBT/CheckCastInstruction.java | 3 + .../wala/shrikeBT/ComparisonInstruction.java | 3 + .../ConditionalBranchInstruction.java | 4 + .../wala/shrikeBT/ConstantInstruction.java | 1 + .../wala/shrikeBT/ConversionInstruction.java | 4 + .../com/ibm/wala/shrikeBT/DupInstruction.java | 1 + .../com/ibm/wala/shrikeBT/GetInstruction.java | 6 + .../ibm/wala/shrikeBT/GotoInstruction.java | 1 + .../com/ibm/wala/shrikeBT/IInstruction.java | 1 + .../ibm/wala/shrikeBT/IInvokeInstruction.java | 1 + .../wala/shrikeBT/InstanceofInstruction.java | 3 + .../com/ibm/wala/shrikeBT/Instruction.java | 7 + .../ibm/wala/shrikeBT/InvokeInstruction.java | 5 + .../ibm/wala/shrikeBT/LoadInstruction.java | 4 + .../ibm/wala/shrikeBT/MonitorInstruction.java | 1 + .../com/ibm/wala/shrikeBT/NewInstruction.java | 1 + .../com/ibm/wala/shrikeBT/PopInstruction.java | 1 + .../com/ibm/wala/shrikeBT/PutInstruction.java | 5 + .../ibm/wala/shrikeBT/ReturnInstruction.java | 1 + .../ibm/wala/shrikeBT/ShiftInstruction.java | 4 + .../ibm/wala/shrikeBT/StoreInstruction.java | 3 + .../ibm/wala/shrikeBT/SwapInstruction.java | 1 + .../ibm/wala/shrikeBT/SwitchInstruction.java | 1 + .../ibm/wala/shrikeBT/ThrowInstruction.java | 1 + .../ibm/wala/shrikeBT/UnaryOpInstruction.java | 3 + .../analysis/ClassHierarchyStore.java | 4 + .../shrikeBT/info/InstructionTypeCounter.java | 1 + .../wala/shrikeBT/info/LocalAllocator.java | 1 + .../shrikeBT/info/ThisAssignmentChecker.java | 1 + .../shrikeCT/tools/AddSerialVersion.java | 2 + .../tools/OfflineInstrumenterBase.java | 1 + .../wala/dataflow/graph/BasicFramework.java | 2 + .../impl/AbstractFixedPointSolver.java | 2 + .../impl/DefaultFixedPointSolver.java | 1 + .../impl/DefaultFixedPointSystem.java | 13 + .../fixedpoint/impl/GeneralStatement.java | 4 + .../fixedpoint/impl/NullaryStatement.java | 4 + .../ibm/wala/fixpoint/AbstractVariable.java | 2 + .../ibm/wala/fixpoint/BitVectorVariable.java | 1 + .../ibm/wala/fixpoint/BooleanVariable.java | 1 + .../com/ibm/wala/fixpoint/IntSetVariable.java | 1 + .../com/ibm/wala/fixpoint/UnaryStatement.java | 4 + .../src/com/ibm/wala/util/ProgressMaster.java | 4 + .../util/collections/AbstractMultiMap.java | 10 + .../wala/util/collections/ArrayIterator.java | 3 + .../ibm/wala/util/collections/ArraySet.java | 3 + .../ibm/wala/util/collections/BimodalMap.java | 12 + .../util/collections/CollectionFilter.java | 1 + .../util/collections/ComposedIterator.java | 3 + .../util/collections/CompoundIntIterator.java | 2 + .../util/collections/CompoundIterator.java | 3 + .../util/collections/EmptyIntIterator.java | 2 + .../wala/util/collections/EmptyIterator.java | 3 + .../wala/util/collections/FilterIterator.java | 3 + .../wala/util/collections/Filtersection.java | 1 + .../util/collections/HashCodeComparator.java | 1 + .../wala/util/collections/ImmutableStack.java | 3 +- .../collections/IndiscriminateFilter.java | 1 + .../wala/util/collections/IntMapIterator.java | 3 + .../util/collections/Iterator2Collection.java | 13 + .../util/collections/Iterator2Iterable.java | 1 + .../wala/util/collections/Iterator2List.java | 10 + .../util/collections/IteratorPlusOne.java | 3 + .../util/collections/IteratorPlusTwo.java | 3 + .../wala/util/collections/MapIterator.java | 3 + .../ibm/wala/util/collections/MultiMap.java | 1 + .../collections/NonNullSingletonIterator.java | 3 + .../util/collections/ObjectArrayMapping.java | 7 + .../ibm/wala/util/collections/OrFilter.java | 1 + .../com/ibm/wala/util/collections/Pair.java | 3 + .../util/collections/ReverseIterator.java | 3 + .../wala/util/collections/SimpleVector.java | 5 + .../ibm/wala/util/collections/SmallMap.java | 12 + .../wala/util/collections/SparseVector.java | 8 + .../util/collections/ToStringComparator.java | 1 + .../wala/util/collections/TwoLevelVector.java | 8 + .../ibm/wala/util/graph/AbstractGraph.java | 16 + .../util/graph/AbstractNumberedGraph.java | 8 + .../util/graph/EdgeFilteredNumberedGraph.java | 12 + .../wala/util/graph/GraphReachability.java | 5 + .../com/ibm/wala/util/graph/GraphSlicer.java | 32 ++ .../com/ibm/wala/util/graph/NodeManager.java | 1 + .../util/graph/dominators/Dominators.java | 13 + .../util/graph/impl/BasicNodeManager.java | 5 + .../graph/impl/BasicOrderedMultiGraph.java | 18 + .../wala/util/graph/impl/DelegatingGraph.java | 16 + .../impl/DelegatingNumberedEdgeManager.java | 15 + .../impl/DelegatingNumberedNodeManager.java | 12 + .../util/graph/impl/InvertingEdgeManager.java | 10 + .../impl/InvertingNumberedEdgeManager.java | 12 + .../wala/util/graph/impl/NodeWithNumber.java | 2 + .../graph/impl/NodeWithNumberedEdges.java | 7 + .../util/graph/impl/NumberedNodeIterator.java | 3 + .../graph/impl/SlowNumberedNodeManager.java | 9 + .../graph/impl/SparseNumberedEdgeManager.java | 16 + .../graph/labeled/AbstractLabeledGraph.java | 10 + .../labeled/AbstractNumberedLabeledGraph.java | 11 + .../SparseNumberedLabeledEdgeManager.java | 25 ++ .../wala/util/graph/traverse/BFSIterator.java | 3 + .../util/graph/traverse/BFSPathFinder.java | 3 + .../graph/traverse/BoundedBFSIterator.java | 3 + .../com/ibm/wala/util/graph/traverse/DFS.java | 1 + .../traverse/DFSDiscoverTimeIterator.java | 3 + .../graph/traverse/DFSFinishTimeIterator.java | 3 + .../util/graph/traverse/FloydWarshall.java | 15 +- .../wala/util/graph/traverse/SCCIterator.java | 3 + .../ibm/wala/util/heapTrace/HeapTracer.java | 6 +- .../util/intset/BasicNaturalRelation.java | 13 + .../util/intset/BimodalMutableIntSet.java | 19 + .../intset/BimodalMutableIntSetFactory.java | 4 + .../src/com/ibm/wala/util/intset/BitSet.java | 3 + .../ibm/wala/util/intset/BitVectorIntSet.java | 21 ++ .../util/intset/BitVectorIntSetFactory.java | 4 + .../util/intset/DebuggingMutableIntSet.java | 23 ++ .../intset/DebuggingMutableIntSetFactory.java | 4 + .../wala/util/intset/MultiModalIntVector.java | 3 + .../ibm/wala/util/intset/MutableMapping.java | 7 + .../intset/MutableSharedBitVectorIntSet.java | 19 + .../MutableSharedBitVectorIntSetFactory.java | 4 + .../wala/util/intset/MutableSparseIntSet.java | 27 +- .../intset/MutableSparseIntSetFactory.java | 4 + .../util/intset/MutableSparseLongSet.java | 5 + .../intset/MutableSparseLongSetFactory.java | 4 + .../util/intset/OffsetOrdinalSetMapping.java | 7 + .../com/ibm/wala/util/intset/OrdinalSet.java | 4 + .../util/intset/SemiSparseMutableIntSet.java | 21 ++ .../SemiSparseMutableIntSetFactory.java | 4 + .../ibm/wala/util/intset/SimpleIntVector.java | 3 + .../ibm/wala/util/intset/SparseIntSet.java | 15 + .../ibm/wala/util/intset/SparseIntVector.java | 3 + .../ibm/wala/util/intset/SparseLongSet.java | 14 + .../wala/util/intset/TwoLevelIntVector.java | 3 + .../src/com/ibm/wala/viz/NodeDecorator.java | 1 + 644 files changed, 4956 insertions(+), 195 deletions(-) diff --git a/com.ibm.wala.cast.java.polyglot.test/source/com/ibm/wala/cast/java/polyglot/test/Activator.java b/com.ibm.wala.cast.java.polyglot.test/source/com/ibm/wala/cast/java/polyglot/test/Activator.java index bb5cadf97..448f86ed0 100644 --- a/com.ibm.wala.cast.java.polyglot.test/source/com/ibm/wala/cast/java/polyglot/test/Activator.java +++ b/com.ibm.wala.cast.java.polyglot.test/source/com/ibm/wala/cast/java/polyglot/test/Activator.java @@ -31,6 +31,7 @@ public class Activator extends Plugin { * * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext) */ + @Override public void start(BundleContext context) throws Exception { super.start(context); plugin = this; @@ -41,6 +42,7 @@ public class Activator extends Plugin { * * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext) */ + @Override public void stop(BundleContext context) throws Exception { plugin = null; super.stop(context); diff --git a/com.ibm.wala.cast.java.polyglot.test/source/com/ibm/wala/cast/java/test/PolyglotJLexTest.java b/com.ibm.wala.cast.java.polyglot.test/source/com/ibm/wala/cast/java/test/PolyglotJLexTest.java index a4e80d1c1..21b34b0ac 100644 --- a/com.ibm.wala.cast.java.polyglot.test/source/com/ibm/wala/cast/java/test/PolyglotJLexTest.java +++ b/com.ibm.wala.cast.java.polyglot.test/source/com/ibm/wala/cast/java/test/PolyglotJLexTest.java @@ -23,6 +23,7 @@ public class PolyglotJLexTest extends JLexTest { @Override protected JavaSourceAnalysisEngine getAnalysisEngine(final String[] mainClassDescriptors, Collection sources, List libs) { JavaSourceAnalysisEngine engine = new PolyglotJavaSourceAnalysisEngine() { + @Override protected Iterable makeDefaultEntrypoints(AnalysisScope scope, IClassHierarchy cha) { return Util.makeMainEntrypoints(JavaSourceAnalysisScope.SOURCE, cha, new String[] { "LJLex/Main" }); } diff --git a/com.ibm.wala.cast.java.polyglot.test/source/com/ibm/wala/cast/java/test/PolyglotJavaIRTest.java b/com.ibm.wala.cast.java.polyglot.test/source/com/ibm/wala/cast/java/test/PolyglotJavaIRTest.java index e0950fc3f..47918b1a2 100644 --- a/com.ibm.wala.cast.java.polyglot.test/source/com/ibm/wala/cast/java/test/PolyglotJavaIRTest.java +++ b/com.ibm.wala.cast.java.polyglot.test/source/com/ibm/wala/cast/java/test/PolyglotJavaIRTest.java @@ -28,6 +28,7 @@ public class PolyglotJavaIRTest extends JavaIRTests { @Override protected AbstractAnalysisEngine getAnalysisEngine(final String[] mainClassDescriptors, Collection sources, List libs) { JavaSourceAnalysisEngine engine = new PolyglotJavaSourceAnalysisEngine() { + @Override protected Iterable makeDefaultEntrypoints(AnalysisScope scope, IClassHierarchy cha) { return Util.makeMainEntrypoints(JavaSourceAnalysisScope.SOURCE, cha, mainClassDescriptors); } diff --git a/com.ibm.wala.cast.java.polyglot.test/source/com/ibm/wala/cast/java/test/PolyglotSyncDuplicatorTest.java b/com.ibm.wala.cast.java.polyglot.test/source/com/ibm/wala/cast/java/test/PolyglotSyncDuplicatorTest.java index 58dc1e851..08a0224a2 100644 --- a/com.ibm.wala.cast.java.polyglot.test/source/com/ibm/wala/cast/java/test/PolyglotSyncDuplicatorTest.java +++ b/com.ibm.wala.cast.java.polyglot.test/source/com/ibm/wala/cast/java/test/PolyglotSyncDuplicatorTest.java @@ -26,15 +26,19 @@ import com.ibm.wala.ipa.cha.IClassHierarchy; public class PolyglotSyncDuplicatorTest extends SyncDuplicatorTest { + @Override protected JavaSourceAnalysisEngine getAnalysisEngine(final String[] mainClassDescriptors, Collection sources, List libs) { JavaSourceAnalysisEngine engine = new PolyglotJavaSourceAnalysisEngine() { + @Override protected Iterable makeDefaultEntrypoints(AnalysisScope scope, IClassHierarchy cha) { return Util.makeMainEntrypoints(JavaSourceAnalysisScope.SOURCE, cha, mainClassDescriptors); } + @Override public IRTranslatorExtension getTranslatorExtension() { JavaIRTranslatorExtension ext = new JavaIRTranslatorExtension(); ext.setCAstRewriterFactory(new CAstRewriterFactory() { + @Override public CAstRewriter createCAstRewriter(CAst ast) { return new SynchronizedBlockDuplicator(ast, true, testMethod); } diff --git a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/AscriptionGoal.java b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/AscriptionGoal.java index ac69460cc..5402aa51a 100644 --- a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/AscriptionGoal.java +++ b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/AscriptionGoal.java @@ -32,6 +32,7 @@ public class AscriptionGoal extends VisitorGoal { public AscriptionGoal(Job job) { super(job, new AscriptionVisitor(job, job.extensionInfo().typeSystem(), job.extensionInfo().nodeFactory()) { + @Override public Expr ascribe(Expr e, Type toType) throws SemanticException { if (e instanceof ArrayInit && e.type().isNull()) { return e.type(toType); diff --git a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/IRGoal.java b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/IRGoal.java index e33f9951f..8cd6b8b01 100644 --- a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/IRGoal.java +++ b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/IRGoal.java @@ -66,6 +66,7 @@ public class IRGoal extends SourceGoal_c /* PORT1.7 removed 'implements EndGoal' return true; } + @Override public String name() { return ""; } diff --git a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/JavaIRTranslatorExtension.java b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/JavaIRTranslatorExtension.java index babbf3938..b4cc2173f 100644 --- a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/JavaIRTranslatorExtension.java +++ b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/JavaIRTranslatorExtension.java @@ -52,11 +52,13 @@ public class JavaIRTranslatorExtension extends JLExtensionInfo implements IRTran }; } + @Override public void setSourceLoader(PolyglotSourceLoaderImpl sourceLoader) { fSourceLoader= sourceLoader; fMapper= new PolyglotIdentityMapper(sourceLoader.getReference()); } + @Override public PolyglotIdentityMapper getIdentityMapper() { return fMapper; } @@ -65,10 +67,12 @@ public class JavaIRTranslatorExtension extends JLExtensionInfo implements IRTran rewriterFactory = factory; } + @Override public CAstRewriterFactory getCAstRewriterFactory() { return rewriterFactory; } + @Override public boolean getReplicateForDoLoops() { return false; } diff --git a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/ModuleSource.java b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/ModuleSource.java index 1be479632..249835130 100644 --- a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/ModuleSource.java +++ b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/ModuleSource.java @@ -37,14 +37,17 @@ public class ModuleSource extends FileSource { public ModuleSource(final SourceModule module) throws IOException { super(new Resource() { + @Override public File file() { return new File(module.getURL().getFile()); } + @Override public InputStream getInputStream() throws IOException { return module.getInputStream(); } + @Override public String name() { String fullPath = module.getURL().getFile(); int idx= fullPath.lastIndexOf(File.separatorChar); diff --git a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotClassLoaderFactory.java b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotClassLoaderFactory.java index 06a24357b..9e1bae855 100644 --- a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotClassLoaderFactory.java +++ b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotClassLoaderFactory.java @@ -43,6 +43,7 @@ public class PolyglotClassLoaderFactory extends ClassLoaderFactoryImpl { return fExtensionMap.get(clr); } + @Override protected IClassLoader makeNewClassLoader(ClassLoaderReference classLoaderReference, IClassHierarchy cha, IClassLoader parent, AnalysisScope scope) throws IOException { if (classLoaderReference.equals(JavaSourceAnalysisScope.SOURCE)) { diff --git a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotIdentityMapper.java b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotIdentityMapper.java index 1e6786234..88f244263 100644 --- a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotIdentityMapper.java +++ b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotIdentityMapper.java @@ -62,6 +62,7 @@ public class PolyglotIdentityMapper implements IdentityMapper> getAllScopedEntities() { return Collections.singletonMap(null, fTopLevelDecls); } + @Override public Iterator getScopedEntities(CAstNode construct) { Assertions.UNREACHABLE("CompilationUnitEntity asked for AST-related entities, but it has no AST."); return null; } + @Override public CAstNode getAST() { return null; } @@ -1405,29 +1469,35 @@ public class PolyglotJava2CAstTranslator { return null; } + @Override public CAstControlFlowMap getControlFlow() { Assertions.UNREACHABLE("CompilationUnitEntity.getControlFlow()"); return null; } + @Override public CAstSourcePositionMap getSourceMap() { Assertions.UNREACHABLE("CompilationUnitEntity.getSourceMap()"); return null; } + @Override public CAstSourcePositionMap.Position getPosition() { return null; } + @Override public CAstNodeTypeMap getNodeTypeMap() { Assertions.UNREACHABLE("CompilationUnitEntity.getNodeTypeMap()"); return null; } + @Override public Collection getQualifiers() { return Collections.EMPTY_LIST; } + @Override public CAstType getType() { Assertions.UNREACHABLE("CompilationUnitEntity.getType()"); return null; @@ -1450,6 +1520,7 @@ public class PolyglotJava2CAstTranslator { fType = type; } + @Override public String getName() { // TODO Will the IdentityMapper do the right thing for anonymous classes? // If so, we can delete most of the following logic... @@ -1459,6 +1530,7 @@ public class PolyglotJava2CAstTranslator { return fIdentityMapper.getTypeRef(fType).getName().toString(); } + @Override public Collection getSupertypes() { if (fSuperTypes == null) { buildSuperTypes(); @@ -1495,10 +1567,12 @@ public class PolyglotJava2CAstTranslator { } } + @Override public Collection getQualifiers() { return mapFlagsToQualifiers(fType.flags()); } + @Override public boolean isInterface() { if (fType == fSystem.Object()) { return false; // fSystem.Object() MUST be a class, as far as WALA is concerned @@ -1514,10 +1588,12 @@ public class PolyglotJava2CAstTranslator { fEntities = new LinkedHashMap>(entities); } + @Override public Map> getAllScopedEntities() { return Collections.unmodifiableMap(fEntities); } + @Override public Iterator getScopedEntities(CAstNode construct) { if (fEntities.containsKey(construct)) { return (fEntities.get(construct)).iterator(); @@ -1526,6 +1602,7 @@ public class PolyglotJava2CAstTranslator { } } + @Override public String getSignature() { return Util.methodEntityToSelector(this).toString(); } @@ -1555,30 +1632,37 @@ public class PolyglotJava2CAstTranslator { sourcePosition = makePosition(p); } + @Override public int getKind() { return TYPE_ENTITY; } + @Override public String getName() { return fName; // unqualified? } + @Override public String getSignature() { return "L" + fName.replace('.', '/') + ";"; } + @Override public String[] getArgumentNames() { return new String[0]; } + @Override public CAstNode[] getArgumentDefaults() { return new CAstNode[0]; } + @Override public int getArgumentCount() { return 0; } + @Override public CAstNode getAST() { // This entity has no AST nodes, really. return null; @@ -1589,42 +1673,51 @@ public class PolyglotJava2CAstTranslator { return null; } + @Override public Map> getAllScopedEntities() { return Collections.singletonMap(null, fEntities); } + @Override public Iterator getScopedEntities(CAstNode construct) { Assertions.UNREACHABLE("Non-AST-bearing entity (ClassEntity) asked for scoped entities related to a given AST node"); return null; } + @Override public CAstControlFlowMap getControlFlow() { // This entity has no AST nodes, really. return null; } + @Override public CAstSourcePositionMap getSourceMap() { // This entity has no AST nodes, really. return null; } + @Override public CAstSourcePositionMap.Position getPosition() { return sourcePosition; } + @Override public CAstNodeTypeMap getNodeTypeMap() { // This entity has no AST nodes, really. return new CAstNodeTypeMap() { + @Override public CAstType getNodeType(CAstNode node) { throw new UnsupportedOperationException(); } + @Override public Collection getMappedNodes() { throw new UnsupportedOperationException(); } }; } + @Override public Collection getQualifiers() { if (fCT == fTypeSystem.Object()) { // pretend the root of the hierarchy is always a class return mapFlagsToQualifiers(fCT.flags().clear(Flags.INTERFACE)); @@ -1632,6 +1725,7 @@ public class PolyglotJava2CAstTranslator { return mapFlagsToQualifiers(fCT.flags()); } + @Override public CAstType getType() { return new PolyglotJavaType(fCT, getTypeDict(), fTypeSystem); } @@ -1680,14 +1774,17 @@ public class PolyglotJava2CAstTranslator { } } + @Override public String toString() { return fPd.toString(); } + @Override public int getKind() { return CAstEntity.FUNCTION_ENTITY; } + @Override public String getName() { if (fPd instanceof ConstructorInstance) { return MethodReference.initAtom.toString(); @@ -1701,10 +1798,12 @@ public class PolyglotJava2CAstTranslator { } } + @Override public String[] getArgumentNames() { return argumentNames; } + @Override public CAstNode[] getArgumentDefaults() { return new CAstNode[0]; } @@ -1727,45 +1826,55 @@ public class PolyglotJava2CAstTranslator { return false; } + @Override public int getArgumentCount() { return isStatic() ? formalTypes().size() : formalTypes().size() + 1; } + @Override public CAstNode getAST() { return fPdast; } + @Override public CAstControlFlowMap getControlFlow() { return fMc.cfg(); } + @Override public CAstSourcePositionMap getSourceMap() { return fMc.pos(); } + @Override public CAstSourcePositionMap.Position getPosition() { return getSourceMap().getPosition(fPdast); } + @Override public CAstNodeTypeMap getNodeTypeMap() { return fMc.getNodeTypeMap(); } + @Override public Collection getQualifiers() { return mapFlagsToQualifiers(getFlags()); } + @Override public CAstType getType() { return new CAstType.Method() { private Collection fExceptionTypes = null; private List fParameterTypes = null; + @Override public CAstType getReturnType() { return fMc.getTypeDictionary().getCAstTypeFor( (fPd instanceof MethodInstance) ? ((MethodInstance) fPd).returnType() : fSystem.Void()); } + @Override public List getArgumentTypes() { if (fParameterTypes == null) { final List formalTypes = formalTypes(); @@ -1778,16 +1887,19 @@ public class PolyglotJava2CAstTranslator { return fParameterTypes; } + @Override public String getName() { Assertions.UNREACHABLE("CAstType.FunctionImpl#getName() called???"); return "?"; } + @Override public Collection getSupertypes() { Assertions.UNREACHABLE("CAstType.FunctionImpl#getSupertypes() called???"); return null; } + @Override public Collection/* */ getExceptionTypes() { if (fExceptionTypes == null) { fExceptionTypes = new LinkedHashSet(); @@ -1807,10 +1919,12 @@ public class PolyglotJava2CAstTranslator { return fExceptionTypes; } + @Override public int getArgumentCount() { return formalTypes().size(); } + @Override public CAstType getDeclaringType() { return getTypeDict().getCAstTypeFor(declaringType); } @@ -1834,38 +1948,47 @@ public class PolyglotJava2CAstTranslator { fContext = context; } + @Override public int getKind() { return CAstEntity.FIELD_ENTITY; } + @Override public String getName() { return fFI.name().toString(); } + @Override public String getSignature() { return fFI.name() + fIdentityMapper.typeToTypeID(fFI.type()); } + @Override public String[] getArgumentNames() { return new String[0]; } + @Override public CAstNode[] getArgumentDefaults() { return new CAstNode[0]; } + @Override public int getArgumentCount() { return 0; } + @Override public Iterator getScopedEntities(CAstNode construct) { return EmptyIterator.instance(); } + @Override public Map> getAllScopedEntities() { return Collections.emptyMap(); } + @Override public CAstNode getAST() { // No AST for a field decl; initializers folded into // constructor processing... @@ -1877,32 +2000,38 @@ public class PolyglotJava2CAstTranslator { return null; } + @Override public CAstControlFlowMap getControlFlow() { // No AST for a field decl; initializers folded into // constructor processing... return null; } + @Override public CAstSourcePositionMap getSourceMap() { // No AST for a field decl; initializers folded into // constructor processing... return null; } + @Override public CAstSourcePositionMap.Position getPosition() { return makePosition(fFI.position()); } + @Override public CAstNodeTypeMap getNodeTypeMap() { // No AST for a field decl; initializers folded into // constructor processing... return null; } + @Override public Collection getQualifiers() { return mapFlagsToQualifiers(fFI.flags()); } + @Override public CAstType getType() { return fContext.getTypeDictionary().getCAstTypeFor(fFI.type()); } @@ -1933,38 +2062,47 @@ public class PolyglotJava2CAstTranslator { super(parent); } + @Override public Collection> getCatchTargets(Type label) { return parent.getCatchTargets(label); } + @Override public Node getFinally() { return parent.getFinally(); } + @Override public CodeInstance getEnclosingMethod() { return parent.getEnclosingMethod(); } + @Override public Type getEnclosingType() { return parent.getEnclosingType(); } + @Override public CAstTypeDictionary getTypeDictionary() { return parent.getTypeDictionary(); } + @Override public List getStaticInitializers() { return parent.getStaticInitializers(); } + @Override public List getInitializers() { return parent.getInitializers(); } + @Override public Map getLabelMap() { return parent.getLabelMap(); } + @Override public boolean needLVal() { return parent.needLVal(); } @@ -1986,6 +2124,7 @@ public class PolyglotJava2CAstTranslator { fChildren = entities; } + @Override public void addScopedEntity(CAstNode node, CAstEntity e) { Assertions.productionAssertion(node == null); fChildren.add(e); @@ -1995,18 +2134,22 @@ public class PolyglotJava2CAstTranslator { // return null; // fChildren; // } + @Override public Type getEnclosingType() { return type; } + @Override public List getInitializers() { return fInitializers; } + @Override public List getStaticInitializers() { return fStaticInitializers; } + @Override public CAstControlFlowRecorder cfg() { Assertions.UNREACHABLE("ClassContext.cfg()"); return null; @@ -2017,11 +2160,13 @@ public class PolyglotJava2CAstTranslator { return null; } + @Override public Node getFinally() { Assertions.UNREACHABLE("ClassContext.getFinally()"); return null; } + @Override public CodeInstance getEnclosingMethod() { // No one outside a method defining a local class can see it, // so it clearly can't escape through to the method's enclosing @@ -2030,28 +2175,33 @@ public class PolyglotJava2CAstTranslator { return null; } + @Override public CAstSourcePositionRecorder pos() { // No AST, so no AST map Assertions.UNREACHABLE("ClassContext.pos()"); return null; } + @Override public Node getContinueFor(String label) { Assertions.UNREACHABLE("ClassContext.getContinueFor() with label " + label + " in " + type); return null; } + @Override public Node getBreakFor(String label) { System.err.println("Cannot find break target for " + label + " in " + type); Assertions.UNREACHABLE("ClassContext.getBreakFor()"); return null; } + @Override public Map getLabelMap() { Assertions.UNREACHABLE("ClassContext.getLabelMap()"); return null; } + @Override public boolean needLVal() { Assertions.UNREACHABLE("ClassContext.needLVal()"); return false; @@ -2074,31 +2224,38 @@ public class PolyglotJava2CAstTranslator { fEntities = entities; } + @Override public CAstNodeTypeMapRecorder getNodeTypeMap() { return fNodeTypeMap; } + @Override public CAstSourcePositionRecorder pos() { return fSourceMap; } + @Override public CAstControlFlowRecorder cfg() { return fCFG; } + @Override public void addScopedEntity(CAstNode node, CAstEntity entity) { if (! fEntities.containsKey(node)) { fEntities.put(node, new HashSet(1)); } fEntities.get(node).add(entity); } + @Override public Map> getScopedEntities() { return fEntities; } + @Override public Map getLabelMap() { return labelMap; } + @Override public boolean needLVal() { return false; } @@ -2112,11 +2269,13 @@ public class PolyglotJava2CAstTranslator { fPI = pi; } + @Override public Collection> getCatchTargets(Type label) { Collection> result = Collections.singleton(Pair.make(fREType, CAstControlFlowMap.EXCEPTION_TO_EXIT)); return result; } + @Override public CodeInstance getEnclosingMethod() { return fPI; } @@ -2143,6 +2302,7 @@ public class PolyglotJava2CAstTranslator { } } + @Override public Collection> getCatchTargets(Type label) { // Look for all matching targets for this thrown type: // if supertpe match, then return only matches at this catch @@ -2168,10 +2328,12 @@ public class PolyglotJava2CAstTranslator { return catchNodes; } + @Override public List getStaticInitializers() { return null; } + @Override public List getInitializers() { return null; } @@ -2184,45 +2346,54 @@ public class PolyglotJava2CAstTranslator { fTypeDict = typeDict; } + @Override public Collection> getCatchTargets(Type label) { Assertions.UNREACHABLE("RootContext.getCatchTargets()"); return null; } + @Override public Node getFinally() { Assertions.UNREACHABLE("RootContext.getFinally()"); return null; } + @Override public CodeInstance getEnclosingMethod() { Assertions.UNREACHABLE("RootContext.getEnclosingMethod()"); return null; } + @Override public Type getEnclosingType() { Assertions.UNREACHABLE("RootContext.getEnclosingType()"); return null; } + @Override public CAstTypeDictionary getTypeDictionary() { return fTypeDict; } + @Override public List getStaticInitializers() { Assertions.UNREACHABLE("RootContext.getStaticInitializers()"); return null; } + @Override public List getInitializers() { Assertions.UNREACHABLE("RootContext.getInitializers()"); return null; } + @Override public Map getLabelMap() { Assertions.UNREACHABLE("RootContext.getLabelMap()"); return null; } + @Override public boolean needLVal() { Assertions.UNREACHABLE("ClassContext.needLVal()"); return false; @@ -2240,14 +2411,17 @@ public class PolyglotJava2CAstTranslator { this.breakTo = breakTo; } + @Override public Node getBreakFor(String label) { return (label == null || label.equals(this.label)) ? breakTo : super.getBreakFor(label); } + @Override public List getStaticInitializers() { return null; } + @Override public List getInitializers() { return null; } @@ -2261,6 +2435,7 @@ public class PolyglotJava2CAstTranslator { this.continueTo = continueTo; } + @Override public Node getContinueFor(String label) { return (label == null || label.equals(this.label)) ? continueTo : super.getContinueFor(label); } @@ -2272,6 +2447,7 @@ public class PolyglotJava2CAstTranslator { super(parent); } + @Override public boolean needLVal() { return true; } @@ -2297,30 +2473,37 @@ public class PolyglotJava2CAstTranslator { this.p = p; } + @Override public int getFirstLine() { return p.line(); } + @Override public int getLastLine() { return p.endLine(); } + @Override public int getFirstCol() { return p.column(); } + @Override public int getLastCol() { return p.endColumn(); } + @Override public int getFirstOffset() { return p.offset(); } + @Override public int getLastOffset() { return p.endOffset(); } + @Override public URL getURL() { try { String path = p.path(); @@ -2331,6 +2514,7 @@ public class PolyglotJava2CAstTranslator { } } + @Override public InputStream getInputStream() throws IOException { return getURL().openConnection().getInputStream(); } diff --git a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotJavaSourceAnalysisEngine.java b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotJavaSourceAnalysisEngine.java index a22ce4838..b2285b679 100644 --- a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotJavaSourceAnalysisEngine.java +++ b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotJavaSourceAnalysisEngine.java @@ -20,6 +20,7 @@ public class PolyglotJavaSourceAnalysisEngine extends JavaSourceAnalysisEngine { return new JavaIRTranslatorExtension(); } + @Override protected ClassLoaderFactory getClassLoaderFactory(SetOfClasses exclusions) { return new PolyglotClassLoaderFactory(exclusions, getTranslatorExtension()); } diff --git a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotSourceLoaderImpl.java b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotSourceLoaderImpl.java index df8a49022..7eb3a2bc2 100644 --- a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotSourceLoaderImpl.java +++ b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotSourceLoaderImpl.java @@ -36,6 +36,7 @@ public class PolyglotSourceLoaderImpl extends JavaSourceLoaderImpl { return fExtInfo; } + @Override protected SourceModuleTranslator getTranslator() { return new PolyglotSourceModuleTranslator(cha.getScope(), fExtInfo, this, JavaSourceAnalysisScope.SOURCE); } diff --git a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotSourceModuleTranslator.java b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotSourceModuleTranslator.java index f59a6aff2..39da5ee70 100644 --- a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotSourceModuleTranslator.java +++ b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotSourceModuleTranslator.java @@ -108,6 +108,7 @@ public class PolyglotSourceModuleTranslator implements SourceModuleTranslator { fSourcePath = "."; } + @Override public void loadAllSources(Set modules) { Options opts= fExtInfo.getOptions(); opts.assertions = true; diff --git a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotTypeDictionary.java b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotTypeDictionary.java index 6ab77ec71..a381be5e9 100644 --- a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotTypeDictionary.java +++ b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotTypeDictionary.java @@ -42,18 +42,22 @@ public class PolyglotTypeDictionary extends CAstTypeDictionaryImpl { fEltCAstType = getCAstTypeFor(fEltPolyglotType); } + @Override public int getNumDimensions() { return 1; // always 1 for Java } + @Override public CAstType getElementType() { return fEltCAstType; } + @Override public String getName() { return "[" + fEltCAstType.getName(); } + @Override public Collection getSupertypes() { if (fEltPolyglotType.isPrimitive()) return Collections.singleton(getCAstTypeFor(fTypeSystem.Object())); @@ -81,6 +85,7 @@ public class PolyglotTypeDictionary extends CAstTypeDictionaryImpl { fTranslator = translator; } + @Override public CAstType getCAstTypeFor(Object astType) { CAstType type = super.getCAstTypeFor(astType); // Handle the case where we haven't seen an AST decl for some type before diff --git a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotUnwoundIRTranslatorExtension.java b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotUnwoundIRTranslatorExtension.java index e154dfcea..00f942de5 100755 --- a/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotUnwoundIRTranslatorExtension.java +++ b/com.ibm.wala.cast.java.polyglot/source/com/ibm/wala/cast/java/translator/polyglot/PolyglotUnwoundIRTranslatorExtension.java @@ -24,9 +24,11 @@ public class PolyglotUnwoundIRTranslatorExtension this.unrollDepth = unrollDepth; } + @Override public CAstRewriterFactory,AstLoopUnwinder.UnwindKey> getCAstRewriterFactory() { return new CAstRewriterFactory,AstLoopUnwinder.UnwindKey>() { - public AstLoopUnwinder createCAstRewriter(CAst ast) { + @Override + public AstLoopUnwinder createCAstRewriter(CAst ast) { return new AstLoopUnwinder(ast, true, unrollDepth); } }; diff --git a/com.ibm.wala.cast.java.test.data/.settings/org.eclipse.jdt.core.prefs b/com.ibm.wala.cast.java.test.data/.settings/org.eclipse.jdt.core.prefs index 92bf738bc..e1b29887d 100644 --- a/com.ibm.wala.cast.java.test.data/.settings/org.eclipse.jdt.core.prefs +++ b/com.ibm.wala.cast.java.test.data/.settings/org.eclipse.jdt.core.prefs @@ -1,5 +1,10 @@ eclipse.preferences.version=1 instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault +org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve @@ -11,18 +16,23 @@ org.eclipse.jdt.core.compiler.doc.comment.support=enabled org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning +org.eclipse.jdt.core.compiler.problem.deadCode=ignore org.eclipse.jdt.core.compiler.problem.deprecation=warning org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning +org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning org.eclipse.jdt.core.compiler.problem.forbiddenReference=error org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning +org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning @@ -33,44 +43,67 @@ org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning +org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning +org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled +org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore +org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning +org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore +org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore +org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore +org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning +org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning +org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning +org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled org.eclipse.jdt.core.compiler.problem.unusedImport=warning org.eclipse.jdt.core.compiler.problem.unusedLabel=warning org.eclipse.jdt.core.compiler.problem.unusedLocal=warning +org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning +org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.compiler.source=1.6 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false diff --git a/com.ibm.wala.cast.java.test.data/src/AnonymousClass.java b/com.ibm.wala.cast.java.test.data/src/AnonymousClass.java index 33ce01281..8aeea4c1c 100644 --- a/com.ibm.wala.cast.java.test.data/src/AnonymousClass.java +++ b/com.ibm.wala.cast.java.test.data/src/AnonymousClass.java @@ -19,8 +19,10 @@ public class AnonymousClass { Foo f= new Foo() { int value = 3; - public int getValue() { return value; } - public int getValueBase() { return value - base.intValue(); } + + public int getValue() { return value; } + + public int getValueBase() { return value - base.intValue(); } }; System.out.println(f.getValue()); @@ -35,19 +37,22 @@ public class AnonymousClass { abstract class FooImpl implements Foo { int y; - public abstract int getValue(); + + public abstract int getValue(); FooImpl(int _y) { y = _y; } - public int getValueBase() { + + public int getValueBase() { return y + getValue() - base.intValue(); } } Foo f= new FooImpl(-4) { - public int getValue() { return 7; } + + public int getValue() { return 7; } }; System.out.println(f.getValue()); diff --git a/com.ibm.wala.cast.java.test.data/src/FunkySupers.java b/com.ibm.wala.cast.java.test.data/src/FunkySupers.java index ff61a6417..17697e5f4 100644 --- a/com.ibm.wala.cast.java.test.data/src/FunkySupers.java +++ b/com.ibm.wala.cast.java.test.data/src/FunkySupers.java @@ -21,7 +21,8 @@ public class FunkySupers { } class SubFunkySupers extends FunkySupers { - int funky(FunkySupers fs) { + + int funky(FunkySupers fs) { SubFunkySupers.super.funky(fs); SubFunkySupers.this.funky(fs); SubFunkySupers.this.y = 7; diff --git a/com.ibm.wala.cast.java.test.data/src/Inheritance1.java b/com.ibm.wala.cast.java.test.data/src/Inheritance1.java index b36a90a97..af56df73e 100644 --- a/com.ibm.wala.cast.java.test.data/src/Inheritance1.java +++ b/com.ibm.wala.cast.java.test.data/src/Inheritance1.java @@ -29,9 +29,11 @@ class Base { } } class Derived extends Base { + public void foo() { super.foo(); } + public String bar(int x) { return Integer.toHexString(x); } diff --git a/com.ibm.wala.cast.java.test.data/src/InnerClassLexicalReads.java b/com.ibm.wala.cast.java.test.data/src/InnerClassLexicalReads.java index 287d8b391..28426514c 100644 --- a/com.ibm.wala.cast.java.test.data/src/InnerClassLexicalReads.java +++ b/com.ibm.wala.cast.java.test.data/src/InnerClassLexicalReads.java @@ -31,7 +31,8 @@ public class InnerClassLexicalReads { * 0 v2:com.ibm.wala.ssa.SymbolTable$1@16b18b6 = lexical:y@LInnerClassLexicalReads/makeIntConstant(I)LIntConstant; * 1 return v2:com.ibm.wala.ssa.SymbolTable$1@16b18b6[11:4] -> [11:13] */ - public int getConstant() { + + public int getConstant() { return y; } }; diff --git a/com.ibm.wala.cast.java.test.data/src/InterfaceTest1.java b/com.ibm.wala.cast.java.test.data/src/InterfaceTest1.java index 59ab4f912..82c474622 100644 --- a/com.ibm.wala.cast.java.test.data/src/InterfaceTest1.java +++ b/com.ibm.wala.cast.java.test.data/src/InterfaceTest1.java @@ -25,6 +25,7 @@ class FooIT1 implements IFoo { public FooIT1(char ch) { fValue= ch; } + public char getValue() { return fValue; } diff --git a/com.ibm.wala.cast.java.test.data/src/MiniaturSliceBug.java b/com.ibm.wala.cast.java.test.data/src/MiniaturSliceBug.java index 2528e7cae..0e3c9301e 100644 --- a/com.ibm.wala.cast.java.test.data/src/MiniaturSliceBug.java +++ b/com.ibm.wala.cast.java.test.data/src/MiniaturSliceBug.java @@ -29,6 +29,7 @@ abstract class PrimitiveWrapper { * {@inheritDoc} * @see java.lang.Object#equals(java.lang.Object) */ + abstract public boolean equals(Object o); } @@ -47,6 +48,7 @@ final class IntWrapper extends PrimitiveWrapper { * {@inheritDoc} * @see com.ibm.miniatur.tests.sequential.PrimitiveWrapper#intValue() */ + public int intValue() { return val; } @@ -55,6 +57,7 @@ final class IntWrapper extends PrimitiveWrapper { * {@inheritDoc} * @see com.ibm.miniatur.tests.sequential.PrimitiveWrapper#setIntValue(int) */ + public void setIntValue(int i) { this.val = i; } @@ -63,6 +66,7 @@ final class IntWrapper extends PrimitiveWrapper { * {@inheritDoc} * @see com.ibm.miniatur.tests.sequential.PrimitiveWrapper#equals(java.lang.Object) */ + public boolean equals(Object o) { return o instanceof IntWrapper && ((IntWrapper)o).val==val; } diff --git a/com.ibm.wala.cast.java.test.data/src/SimpleCalls.java b/com.ibm.wala.cast.java.test.data/src/SimpleCalls.java index 1320f5522..7ea739d60 100644 --- a/com.ibm.wala.cast.java.test.data/src/SimpleCalls.java +++ b/com.ibm.wala.cast.java.test.data/src/SimpleCalls.java @@ -13,7 +13,8 @@ interface ISimpleCalls { public void helloWorld(); } public class SimpleCalls implements ISimpleCalls { - public void helloWorld() { + + public void helloWorld() { System.out.println("hello world!"); } public int anotherCall() { diff --git a/com.ibm.wala.cast.java.test.data/src/Thread1.java b/com.ibm.wala.cast.java.test.data/src/Thread1.java index e7c54f474..d483dbb10 100644 --- a/com.ibm.wala.cast.java.test.data/src/Thread1.java +++ b/com.ibm.wala.cast.java.test.data/src/Thread1.java @@ -13,6 +13,7 @@ class R implements Runnable { R(int i) { this.i = i; } + public void run() { return; } diff --git a/com.ibm.wala.cast.java.test.data/src/foo/SimpleNames.java b/com.ibm.wala.cast.java.test.data/src/foo/SimpleNames.java index 2648ef81a..b46c5b610 100644 --- a/com.ibm.wala.cast.java.test.data/src/foo/SimpleNames.java +++ b/com.ibm.wala.cast.java.test.data/src/foo/SimpleNames.java @@ -55,7 +55,8 @@ public class SimpleNames { final int i = 5; new Object() { - public int hashCode() { + + public int hashCode() { f = 5; // SimpleNames.this = 5 s = 6; // SimpleNames.s = 6 diff --git a/com.ibm.wala.cast.java.test.data/src/foo/bar/hello/world/ConstructorsAndInitializers.java b/com.ibm.wala.cast.java.test.data/src/foo/bar/hello/world/ConstructorsAndInitializers.java index 169d8157d..91cfa92d3 100644 --- a/com.ibm.wala.cast.java.test.data/src/foo/bar/hello/world/ConstructorsAndInitializers.java +++ b/com.ibm.wala.cast.java.test.data/src/foo/bar/hello/world/ConstructorsAndInitializers.java @@ -76,7 +76,7 @@ public class ConstructorsAndInitializers extends Super { iX = 55 + 12; } - public String toString() { + public String toString() { return s + " -- from an anon class in " + iX + "," + sX + ": " + ConstructorsAndInitializers.this.s; } diff --git a/com.ibm.wala.cast.java.test.data/src/foo/bar/hello/world/InnerClasses.java b/com.ibm.wala.cast.java.test.data/src/foo/bar/hello/world/InnerClasses.java index 55be101b4..935545d51 100644 --- a/com.ibm.wala.cast.java.test.data/src/foo/bar/hello/world/InnerClasses.java +++ b/com.ibm.wala.cast.java.test.data/src/foo/bar/hello/world/InnerClasses.java @@ -45,7 +45,7 @@ public class InnerClasses extends Temp { Object supportLocalBusiness() { final int x = 54; class FooBar { - public int hashCode() { return x; } + public int hashCode() { return x; } } return new FooBar(); } @@ -53,7 +53,7 @@ public class InnerClasses extends Temp { static Object anonymousCoward() { final int x = 5; return new Object() { - public int hashCode() { return x; } + public int hashCode() { return x; } }; } @@ -64,7 +64,7 @@ public class InnerClasses extends Temp { System.out.println(anonymousCoward().hashCode()); final String xx = "crazy"; Outie outie = new Outie("weird") { - public String toString() { + public String toString() { return "bogus" + x + xx + xxxx; } }; diff --git a/com.ibm.wala.cast.java.test.data/src/foo/bar/hello/world/MethodMadness.java b/com.ibm.wala.cast.java.test.data/src/foo/bar/hello/world/MethodMadness.java index 961a7a66e..f558e850b 100644 --- a/com.ibm.wala.cast.java.test.data/src/foo/bar/hello/world/MethodMadness.java +++ b/com.ibm.wala.cast.java.test.data/src/foo/bar/hello/world/MethodMadness.java @@ -95,7 +95,7 @@ public class MethodMadness { return 13 + x; } - protected int protectedInteger() { + protected int protectedInteger() { return 233 + x; } diff --git a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/AnonGeneNullarySimple.java b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/AnonGeneNullarySimple.java index 2395285ec..02cf96ea2 100644 --- a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/AnonGeneNullarySimple.java +++ b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/AnonGeneNullarySimple.java @@ -44,7 +44,8 @@ public class AnonGeneNullarySimple { } static class StrTripler implements Ops { - public String nullary() { + + public String nullary() { String x = "talk about it "; return x+x+x; } diff --git a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/AnonymousGenerics.java b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/AnonymousGenerics.java index 1ab55e264..85ce14520 100644 --- a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/AnonymousGenerics.java +++ b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/AnonymousGenerics.java @@ -48,10 +48,12 @@ public class AnonymousGenerics { // if has type parameters, find overriding method and // get erasures for all of those types and make a new method // that calls this one (with casts). no worries about return values. - public String unary(String x) { + + public String unary(String x) { return x + x + x; } - public String nullary() { + + public String nullary() { String x = "talk about it "; return x+x+x; } @@ -63,10 +65,12 @@ public class AnonymousGenerics { private void doit() { Ops strQuadrupler = new Ops() { - public String unary(String x) { + + public String unary(String x) { return x+x+x+x; } - public String nullary() { + + public String nullary() { String x = "time to make a move to the global economy "; return x+x+x+x; } diff --git a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/Cocovariant.java b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/Cocovariant.java index d7b3ef5d0..a2b08f2fe 100644 --- a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/Cocovariant.java +++ b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/Cocovariant.java @@ -42,9 +42,11 @@ public class Cocovariant { A foo(String x) { return null; } } static class B extends A { + B foo(String x) { return null; } } static class C extends B { + C foo(String x) { return null; } } public static void main(String[] args) { diff --git a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/CustomGenericsAndFields.java b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/CustomGenericsAndFields.java index 5b722006b..34f550a3a 100644 --- a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/CustomGenericsAndFields.java +++ b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/CustomGenericsAndFields.java @@ -51,14 +51,16 @@ interface IGeneric { class ConcreteGeneric implements IGeneric { Q x; - public Q bar(Q a, Q b) { + + public Q bar(Q a, Q b) { x = a; if (b.hashCode() == a.hashCode() || b.toString().equals(a.toString())) return a; return b; } - public Q foo() { + + public Q foo() { return x; } } @@ -68,7 +70,8 @@ class ConcreteGeneric2 extends ConcreteGeneric { public void setFoo(Q a) { y = a; } - public Q foo() { + + public Q foo() { return y; } } diff --git a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/GenericMemberClasses.java b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/GenericMemberClasses.java index 522dd137e..24b25d1d7 100644 --- a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/GenericMemberClasses.java +++ b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/GenericMemberClasses.java @@ -45,16 +45,19 @@ public class GenericMemberClasses { T x = null; private int localChangeID; - public boolean hasNext() { + + public boolean hasNext() { return ( localChangeID == 5 ); } - public T next() { + + public T next() { localChangeID = 5; return x; } - public void remove() { + + public void remove() { } } public static void main(String args[]) { diff --git a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/MoreOverriddenGenerics.java b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/MoreOverriddenGenerics.java index 40f70a9a1..1684cca24 100644 --- a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/MoreOverriddenGenerics.java +++ b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/MoreOverriddenGenerics.java @@ -47,13 +47,15 @@ public class MoreOverriddenGenerics { } class Sub extends Super { - public Number get() { + + public Number get() { return super.get(); } } class SubSub extends Sub { - public Long get() { + + public Long get() { return new Long(6); } } diff --git a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/NotSoSimpleEnums.java b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/NotSoSimpleEnums.java index 8560f6473..7bf21ad1d 100644 --- a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/NotSoSimpleEnums.java +++ b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/NotSoSimpleEnums.java @@ -39,10 +39,14 @@ package javaonepointfive; public class NotSoSimpleEnums { public enum Direction { - NORTH("nord") { public Direction getOpposite() { return SOUTH; }}, - EAST("est") { public Direction getOpposite() { return WEST; }}, - SOUTH("sud") { public Direction getOpposite() { return NORTH; }}, - WEST("ouest") { public Direction getOpposite() { return EAST; }}; + NORTH("nord") { + public Direction getOpposite() { return SOUTH; }}, + EAST("est") { + public Direction getOpposite() { return WEST; }}, + SOUTH("sud") { + public Direction getOpposite() { return NORTH; }}, + WEST("ouest") { + public Direction getOpposite() { return EAST; }}; public abstract Direction getOpposite(); diff --git a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/OverridesOnePointFour.java b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/OverridesOnePointFour.java index 31a276436..0fede31c1 100644 --- a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/OverridesOnePointFour.java +++ b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/OverridesOnePointFour.java @@ -43,7 +43,8 @@ public class OverridesOnePointFour { } static class Sub implements Super { - public Long get() { + + public Long get() { return new Long(6); } } diff --git a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/VarargsCovariant.java b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/VarargsCovariant.java index d85780e6b..4f0c34905 100644 --- a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/VarargsCovariant.java +++ b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/VarargsCovariant.java @@ -46,7 +46,8 @@ public class VarargsCovariant { } static class B extends A { - B hello(int... x) { + + B hello(int... x) { System.out.println("b hello"); return this; } diff --git a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/VarargsOverriding.java b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/VarargsOverriding.java index 93b1a0345..a112e79db 100644 --- a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/VarargsOverriding.java +++ b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/VarargsOverriding.java @@ -69,7 +69,8 @@ class VarityTestSuper { } class VarityTestSub extends VarityTestSuper { - void bar(String... args) {} + + void bar(String... args) {} } public class VarargsOverriding { diff --git a/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/JLexTest.java b/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/JLexTest.java index acc86e89d..a991121a2 100644 --- a/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/JLexTest.java +++ b/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/JLexTest.java @@ -18,6 +18,7 @@ public abstract class JLexTest extends IRTests { super(null); } + @Override protected String singleJavaInputForTest() { return "JLex"; } @@ -26,6 +27,7 @@ public abstract class JLexTest extends IRTests { runTest(singleTestSrc(), rtJar, new String[] { "LJLex/Main" }, emptyList, false); } + @Override protected String singleJavaPkgInputForTest(String pkgName) { return ""; } diff --git a/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/JavaIRTests.java b/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/JavaIRTests.java index 48a4f8596..281f41e9d 100644 --- a/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/JavaIRTests.java +++ b/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/JavaIRTests.java @@ -84,6 +84,7 @@ public abstract class JavaIRTests extends IRTests { new IRAssertion() { + @Override public void check(CallGraph cg) { final String typeStr = singleInputForTest(); @@ -115,6 +116,7 @@ public abstract class JavaIRTests extends IRTests { */ new IRAssertion() { + @Override public void check(CallGraph cg) { final String typeStr = "IFoo"; @@ -132,6 +134,7 @@ public abstract class JavaIRTests extends IRTests { */ new IRAssertion() { + @Override public void check(CallGraph cg) { final String typeStr = "FooIT1"; @@ -157,6 +160,7 @@ public abstract class JavaIRTests extends IRTests { */ new IRAssertion() { + @Override public void check(CallGraph cg) { final String typeStr = "Derived"; @@ -186,6 +190,7 @@ public abstract class JavaIRTests extends IRTests { */ new IRAssertion() { + @Override public void check(CallGraph cg) { MethodReference mref = descriptorToMethodRef("Source#Array1#foo#()V", cg.getClassHierarchy()); @@ -215,6 +220,7 @@ public abstract class JavaIRTests extends IRTests { */ new IRAssertion() { + @Override public void check(CallGraph cg) { MethodReference mref = descriptorToMethodRef("Source#ArrayLiteral1#main#([Ljava/lang/String;)V", cg.getClassHierarchy()); @@ -236,6 +242,7 @@ public abstract class JavaIRTests extends IRTests { */ new IRAssertion() { + @Override public void check(CallGraph cg) { MethodReference mref = descriptorToMethodRef("Source#ArrayLiteral2#main#([Ljava/lang/String;)V", cg.getClassHierarchy()); @@ -297,6 +304,7 @@ public abstract class JavaIRTests extends IRTests { */ new IRAssertion() { + @Override public void check(CallGraph cg) { MethodReference mref = descriptorToMethodRef("Source#QualifiedStatic#main#([Ljava/lang/String;)V", cg.getClassHierarchy()); @@ -319,6 +327,7 @@ public abstract class JavaIRTests extends IRTests { new IRAssertion() { + @Override public void check(CallGraph cg) { final String typeStr = singleInputForTest() + "$WhatsIt"; @@ -349,6 +358,7 @@ public abstract class JavaIRTests extends IRTests { new IRAssertion() { + @Override public void check(CallGraph cg) { final String typeStr = singleInputForTest(); @@ -465,6 +475,7 @@ public abstract class JavaIRTests extends IRTests { * Classes local to method are enclosed in the class the methods belong * to. */ + @Override public void check(CallGraph cg) { final String typeStr = singleInputForTest(); final String localClassStr = "Foo"; @@ -501,6 +512,7 @@ public abstract class JavaIRTests extends IRTests { new IRAssertion() { + @Override public void check(CallGraph cg) { final String typeStr = singleInputForTest(); diff --git a/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/TestPlugin.java b/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/TestPlugin.java index 24447a842..ed104b052 100644 --- a/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/TestPlugin.java +++ b/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/TestPlugin.java @@ -31,14 +31,16 @@ public class TestPlugin extends Plugin { /** * This method is called upon plug-in activation */ - public void start(BundleContext context) throws Exception { + @Override + public void start(BundleContext context) throws Exception { super.start(context); } /** * This method is called when the plug-in is stopped */ - public void stop(BundleContext context) throws Exception { + @Override + public void stop(BundleContext context) throws Exception { super.stop(context); plugin = null; } diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/JavaSourcePlugin.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/JavaSourcePlugin.java index 3ea8ff0d7..6087c80aa 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/JavaSourcePlugin.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/JavaSourcePlugin.java @@ -31,14 +31,16 @@ public class JavaSourcePlugin extends Plugin { /** * This method is called upon plug-in activation */ - public void start(BundleContext context) throws Exception { + @Override + public void start(BundleContext context) throws Exception { super.start(context); } /** * This method is called when the plug-in is stopped */ - public void stop(BundleContext context) throws Exception { + @Override + public void stop(BundleContext context) throws Exception { super.stop(context); plugin = null; } diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/analysis/typeInference/AstJavaTypeInference.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/analysis/typeInference/AstJavaTypeInference.java index 12114eb4b..b9d111b53 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/analysis/typeInference/AstJavaTypeInference.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/analysis/typeInference/AstJavaTypeInference.java @@ -36,6 +36,7 @@ public class AstJavaTypeInference extends AstTypeInference { protected IClass stringClass; protected class AstJavaTypeOperatorFactory extends AstTypeOperatorFactory implements AstJavaInstructionVisitor { + @Override public void visitBinaryOp(SSABinaryOpInstruction instruction) { if (doPrimitives) { IBinaryOpInstruction.IOperator op = instruction.getOperator(); @@ -48,6 +49,7 @@ public class AstJavaTypeInference extends AstTypeInference { } } + @Override public void visitEnclosingObjectReference(EnclosingObjectReference inst) { TypeReference type = inst.getEnclosingType(); IClass klass = cha.lookupClass(type); @@ -58,6 +60,7 @@ public class AstJavaTypeInference extends AstTypeInference { } } + @Override public void visitJavaInvoke(AstJavaInvokeInstruction instruction) { TypeReference type = instruction.getDeclaredResultType(); if (type.isReferenceType()) { @@ -81,6 +84,7 @@ public class AstJavaTypeInference extends AstTypeInference { public class AstJavaTypeVarFactory extends TypeVarFactory { + @Override public IVariable makeVariable(int valueNumber) { SymbolTable st = ir.getSymbolTable(); if (st.isStringConstant(valueNumber)) { @@ -105,10 +109,12 @@ public class AstJavaTypeInference extends AstTypeInference { return stringClass; } + @Override protected void initialize() { init(ir, new AstJavaTypeVarFactory(), new AstJavaTypeOperatorFactory()); } + @Override public TypeAbstraction getConstantPrimitiveType(int valueNumber) { SymbolTable st = ir.getSymbolTable(); if (st.isBooleanConstant(valueNumber)) { @@ -123,6 +129,7 @@ public class AstJavaTypeInference extends AstTypeInference { private PrimAndStringOp() { } + @Override public byte evaluate(TypeVariable lhs, TypeVariable[] rhs) { TypeAbstraction meet = null; @@ -164,6 +171,7 @@ public class AstJavaTypeInference extends AstTypeInference { * * @see com.ibm.wala.dataflow.Operator#hashCode() */ + @Override public int hashCode() { return 71292; } @@ -173,6 +181,7 @@ public class AstJavaTypeInference extends AstTypeInference { * * @see com.ibm.wala.dataflow.Operator#equals(java.lang.Object) */ + @Override public boolean equals(Object o) { return o != null && o.getClass().equals(getClass()); } diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/client/JavaSourceAnalysisEngine.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/client/JavaSourceAnalysisEngine.java index 3e89a8f60..6c9b3637a 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/client/JavaSourceAnalysisEngine.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/client/JavaSourceAnalysisEngine.java @@ -86,6 +86,7 @@ public abstract class JavaSourceAnalysisEngine extends AbstractAnalysisEngine { systemEntries.add(M); } + @Override protected void addApplicationModulesToScope() { ClassLoaderReference app = scope.getApplicationLoader(); for (Module M : userEntries) { @@ -99,6 +100,7 @@ public abstract class JavaSourceAnalysisEngine extends AbstractAnalysisEngine { } } + @Override public void buildAnalysisScope() throws IOException { scope = makeSourceAnalysisScope(); @@ -120,6 +122,7 @@ public abstract class JavaSourceAnalysisEngine extends AbstractAnalysisEngine { protected abstract ClassLoaderFactory getClassLoaderFactory(SetOfClasses exclusions); + @Override public IClassHierarchy buildClassHierarchy() { IClassHierarchy cha = null; ClassLoaderFactory factory = getClassLoaderFactory(scope.getExclusions()); @@ -134,6 +137,7 @@ public abstract class JavaSourceAnalysisEngine extends AbstractAnalysisEngine { return cha; } + @Override protected Iterable makeDefaultEntrypoints(AnalysisScope scope, IClassHierarchy cha) { return Util.makeMainEntrypoints(JavaSourceAnalysisScope.SOURCE, cha); } @@ -143,11 +147,13 @@ public abstract class JavaSourceAnalysisEngine extends AbstractAnalysisEngine { return new AnalysisCache(AstIRFactory.makeDefaultFactory()); } + @Override public AnalysisOptions getDefaultOptions(Iterable entrypoints) { AnalysisOptions options = new AnalysisOptions(getScope(), entrypoints); SSAOptions ssaOptions = new SSAOptions(); ssaOptions.setDefaultValues(new SSAOptions.DefaultValues() { + @Override public int getDefaultValue(SymbolTable symtab, int valueNumber) { return symtab.getDefaultValue(valueNumber); } diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/examples/ast/SynchronizedBlockDuplicator.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/examples/ast/SynchronizedBlockDuplicator.java index 2b716c715..c5d6bc663 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/examples/ast/SynchronizedBlockDuplicator.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/examples/ast/SynchronizedBlockDuplicator.java @@ -61,19 +61,23 @@ public class SynchronizedBlockDuplicator extends this.testDirection = testDirection; } + @Override public int hashCode() { return (testDirection ? 1 : -1) * System.identityHashCode(syncNode) * (rest == null ? 1 : rest.hashCode()); } + @Override public UnwindKey parent() { return rest; } + @Override public boolean equals(Object o) { return (o instanceof UnwindKey) && ((UnwindKey) o).testDirection == testDirection && ((UnwindKey) o).syncNode == syncNode && (rest == null ? ((UnwindKey) o).rest == null : rest.equals(((UnwindKey) o).rest)); } + @Override public String toString() { return "#" + testDirection + ((rest == null) ? "" : rest.toString()); } @@ -101,6 +105,7 @@ public class SynchronizedBlockDuplicator extends */ private static class RootContext implements RewriteContext { + @Override public UnwindKey key() { return null; } @@ -131,6 +136,7 @@ public class SynchronizedBlockDuplicator extends this.parent = parent; } + @Override public UnwindKey key() { return new UnwindKey(testDirection, syncNode, parent.key()); } @@ -150,6 +156,7 @@ public class SynchronizedBlockDuplicator extends } } + @Override protected CAstNode flowOutTo(Map nodeMap, CAstNode oldSource, Object label, CAstNode oldTarget, CAstControlFlowMap orig, CAstSourcePositionMap src) { assert oldTarget == CAstControlFlowMap.EXCEPTION_TO_EXIT; @@ -196,6 +203,7 @@ public class SynchronizedBlockDuplicator extends return null; } + @Override protected CAstNode copyNodes(CAstNode n, final CAstControlFlowMap cfg, RewriteContext c, Map, CAstNode> nodeMap) { String varName; // don't copy operators or constants (presumably since they are immutable?) diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/AstJavaSSAPropagationCallGraphBuilder.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/AstJavaSSAPropagationCallGraphBuilder.java index 30beb2b12..73c46148b 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/AstJavaSSAPropagationCallGraphBuilder.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/AstJavaSSAPropagationCallGraphBuilder.java @@ -51,6 +51,7 @@ public class AstJavaSSAPropagationCallGraphBuilder extends AstSSAPropagationCall // // /////////////////////////////////////////////////////////////////////////// + @Override protected boolean useObjectCatalog() { return false; } @@ -69,10 +70,12 @@ public class AstJavaSSAPropagationCallGraphBuilder extends AstSSAPropagationCall this.outer = outer; } + @Override public int hashCode() { return getInstanceKey().hashCode() * outer.hashCode(); } + @Override public boolean equals(Object o) { return (o instanceof EnclosingObjectReferenceKey) && ((EnclosingObjectReferenceKey) o).outer.equals(outer) && ((EnclosingObjectReferenceKey) o).getInstanceKey().equals(getInstanceKey()); @@ -109,15 +112,18 @@ public class AstJavaSSAPropagationCallGraphBuilder extends AstSSAPropagationCall super(vn); } + @Override public void visitEnclosingObjectReference(EnclosingObjectReference inst) { Assertions.UNREACHABLE(); } + @Override public void visitJavaInvoke(AstJavaInvokeInstruction instruction) { bingo = true; } } + @Override protected InterestingVisitor makeInterestingVisitor(CGNode node, int vn) { return new AstJavaInterestingVisitor(vn); } @@ -166,10 +172,12 @@ public class AstJavaSSAPropagationCallGraphBuilder extends AstSSAPropagationCall } else { system.newSideEffect(new UnaryOperator() { + @Override public byte evaluate(PointsToSetVariable lhs, PointsToSetVariable rhs) { IntSetVariable tv = (IntSetVariable) rhs; if (tv.getValue() != null) { tv.getValue().foreach(new IntSetAction() { + @Override public void act(int ptr) { InstanceKey iKey = system.getInstanceKey(ptr); PointerKey enclosing = new EnclosingObjectReferenceKey(iKey, cls); @@ -180,14 +188,17 @@ public class AstJavaSSAPropagationCallGraphBuilder extends AstSSAPropagationCall return NOT_CHANGED; } + @Override public int hashCode() { return System.identityHashCode(this); } + @Override public boolean equals(Object o) { return o == this; } + @Override public String toString() { return "enclosing objects of " + objKey; } @@ -195,6 +206,7 @@ public class AstJavaSSAPropagationCallGraphBuilder extends AstSSAPropagationCall } } + @Override public void visitEnclosingObjectReference(EnclosingObjectReference inst) { PointerKey lvalKey = getPointerKeyForLocal(inst.getDef()); PointerKey objKey = getPointerKeyForLocal(1); @@ -202,6 +214,7 @@ public class AstJavaSSAPropagationCallGraphBuilder extends AstSSAPropagationCall handleEnclosingObject(lvalKey, cls, objKey); } + @Override public void visitNew(SSANewInstruction instruction) { super.visitNew(instruction); InstanceKey iKey = getInstanceKeyForAllocation(instruction.getNewSite()); @@ -272,11 +285,13 @@ public class AstJavaSSAPropagationCallGraphBuilder extends AstSSAPropagationCall } } + @Override public void visitJavaInvoke(AstJavaInvokeInstruction instruction) { visitInvokeInternal(instruction, new DefaultInvariantComputer()); } } + @Override protected ConstraintVisitor makeVisitor(CGNode node) { return new AstJavaConstraintVisitor(this, node); } diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/JavaScopeMappingInstanceKeys.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/JavaScopeMappingInstanceKeys.java index e3ced01c7..89aae96b1 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/JavaScopeMappingInstanceKeys.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/JavaScopeMappingInstanceKeys.java @@ -72,6 +72,7 @@ public class JavaScopeMappingInstanceKeys extends ScopeMappingInstanceKeys { return cls instanceof JavaClass; } + @Override protected boolean needsScopeMappingKey(InstanceKey base) { boolean result = getParents(base).length > 0; if (AstTranslator.DEBUG_LEXICAL) diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/JavaSourceAnalysisScope.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/JavaSourceAnalysisScope.java index 51c519ac5..5d0c405ab 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/JavaSourceAnalysisScope.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/JavaSourceAnalysisScope.java @@ -49,6 +49,7 @@ public class JavaSourceAnalysisScope extends AnalysisScope { return SOURCE; } + @Override public void addToScope(ClassLoaderReference loader, Module m) { if (m instanceof SourceDirectoryTreeModule && loader.equals(ClassLoaderReference.Application)) { super.addToScope(SOURCE, m); diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/modref/AstJavaModRef.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/modref/AstJavaModRef.java index 6b60b34dc..c40954bf7 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/modref/AstJavaModRef.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/modref/AstJavaModRef.java @@ -32,16 +32,19 @@ public class AstJavaModRef extends AstModRef { super(n, result, pa, h); } + @Override public void visitJavaInvoke(AstJavaInvokeInstruction instruction) { } + @Override public void visitEnclosingObjectReference(EnclosingObjectReference inst) { } } + @Override protected RefVisitor makeRefVisitor(CGNode n, Collection result, PointerAnalysis pa, ExtendedHeapModel h) { return new AstJavaRefVisitor(n, result, pa, h); } @@ -56,10 +59,12 @@ public class AstJavaModRef extends AstModRef { } + @Override public void visitJavaInvoke(AstJavaInvokeInstruction instruction) { } + @Override public void visitEnclosingObjectReference(EnclosingObjectReference inst) { } diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/slicer/AstJavaSlicer.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/slicer/AstJavaSlicer.java index 993ad558b..8bb064124 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/slicer/AstJavaSlicer.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/slicer/AstJavaSlicer.java @@ -77,6 +77,7 @@ public class AstJavaSlicer extends Slicer { public static Set gatherAssertions(CallGraph CG, Collection partialRoots) { return gatherStatements(CG, partialRoots, new Filter() { + @Override public boolean accepts(SSAInstruction o) { return o instanceof AstAssertInstruction; } @@ -85,6 +86,7 @@ public class AstJavaSlicer extends Slicer { public static Set gatherMonitors(CallGraph CG, Collection partialRoots) { return gatherStatements(CG, partialRoots, new Filter() { + @Override public boolean accepts(SSAInstruction o) { return o instanceof SSAMonitorInstruction; } @@ -93,6 +95,7 @@ public class AstJavaSlicer extends Slicer { public static Set gatherWrites(CallGraph CG, Collection partialRoots) { return gatherStatements(CG, partialRoots, new Filter() { + @Override public boolean accepts(SSAInstruction o) { return (o instanceof SSAPutInstruction) || (o instanceof SSAArrayStoreInstruction); } @@ -101,6 +104,7 @@ public class AstJavaSlicer extends Slicer { public static Set gatherReads(CallGraph CG, Collection partialRoots) { return gatherStatements(CG, partialRoots, new Filter() { + @Override public boolean accepts(SSAInstruction o) { return (o instanceof SSAGetInstruction) || (o instanceof SSAArrayLoadInstruction); } diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/loader/JavaSourceLoaderImpl.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/loader/JavaSourceLoaderImpl.java index 9684f85fd..cfd0a461d 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/loader/JavaSourceLoaderImpl.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/loader/JavaSourceLoaderImpl.java @@ -108,14 +108,17 @@ public abstract class JavaSourceLoaderImpl extends ClassLoaderImpl { this.annotations = annotations; } + @Override public Collection getAnnotations() { return annotations; } + @Override public IClassHierarchy getClassHierarchy() { return cha; } + @Override public IClass getSuperclass() { boolean excludedSupertype=false; for (Iterator iter = superTypeNames.iterator(); iter.hasNext();) { @@ -143,6 +146,7 @@ public abstract class JavaSourceLoaderImpl extends ClassLoaderImpl { return null; } + @Override public Collection getDirectInterfaces() { List result = new ArrayList(); for (Iterator iter = superTypeNames.iterator(); iter.hasNext();) { @@ -177,6 +181,7 @@ public abstract class JavaSourceLoaderImpl extends ClassLoaderImpl { return enclosingClass; } + @Override public String toString() { StringBuffer sb = new StringBuffer(""; } @@ -324,20 +332,24 @@ public abstract class JavaSourceLoaderImpl extends ClassLoaderImpl { super(methodEntity, owner); } + @Override public String getLocalVariableName(int bcIndex, int localNumber) { Assertions.UNREACHABLE("AbstractJavaMethod.getLocalVariableName() called"); return null; } + @Override public boolean hasLocalVariableTable() { Assertions.UNREACHABLE("AbstractJavaMethod.hasLocalVariableTable() called"); return false; } + @Override public LexicalParent[] getParents() { return new LexicalParent[0]; } + @Override public IClassHierarchy getClassHierarchy() { return cha; } @@ -355,18 +367,22 @@ public abstract class JavaSourceLoaderImpl extends ClassLoaderImpl { super(methodEntity, owner, cfg, symtab, hasCatchBlock, caughtTypes, hasMonitorOp, lexicalInfo, debugInfo); } + @Override public IClassHierarchy getClassHierarchy() { return cha; } + @Override public String getLocalVariableName(int bcIndex, int localNumber) { return null; } + @Override public boolean hasLocalVariableTable() { return false; } + @Override public LexicalParent[] getParents() { if (AstTranslator.DEBUG_LEXICAL) { System.err.println(("resolving parents of " + this)); @@ -409,10 +425,12 @@ public abstract class JavaSourceLoaderImpl extends ClassLoaderImpl { final int hack = i; result[i] = new LexicalParent() { + @Override public String getName() { return parents[hack]; } + @Override public AstMethod getMethod() { return (AstMethod) cls.getMethod(sel); } @@ -467,12 +485,14 @@ public abstract class JavaSourceLoaderImpl extends ClassLoaderImpl { return cha; } + @Override protected void loadAllSources(Set modules) { getTranslator().loadAllSources(modules); } protected abstract SourceModuleTranslator getTranslator(); + @Override public void init(List modules) throws IOException { super.init(modules); fTypeMap = null; @@ -513,97 +533,120 @@ public abstract class JavaSourceLoaderImpl extends ClassLoaderImpl { return javaClass; } + @Override public String toString() { return "Java Source Loader (classes " + loadedClasses.values() + ")"; } public static class InstructionFactory extends JavaInstructionFactory implements AstJavaInstructionFactory { + @Override public com.ibm.wala.cast.java.ssa.EnclosingObjectReference EnclosingObjectReference(int lval, TypeReference type) { return new EnclosingObjectReference(lval, type); } + @Override public AstJavaNewEnclosingInstruction JavaNewEnclosingInstruction(int result, NewSiteReference site, int enclosing) { return new AstJavaNewEnclosingInstruction(result, site, enclosing); } + @Override public AstJavaInvokeInstruction JavaInvokeInstruction(int result, int[] params, int exception, CallSiteReference site) { return new AstJavaInvokeInstruction(result, params, exception, site); } + @Override public AstJavaInvokeInstruction JavaInvokeInstruction(int[] params, int exception, CallSiteReference site) { return new AstJavaInvokeInstruction(params, exception, site); } + @Override public AstJavaInvokeInstruction JavaInvokeInstruction(int[] results, int[] params, int exception, CallSiteReference site, Access[] lexicalReads, Access[] lexicalWrites) { return new AstJavaInvokeInstruction(results, params, exception, site, lexicalReads, lexicalWrites); } + @Override public AstAssertInstruction AssertInstruction(int value, boolean fromSpecification) { return new AstAssertInstruction(value, fromSpecification); } + @Override public com.ibm.wala.cast.ir.ssa.AssignInstruction AssignInstruction(int result, int val) { return new AssignInstruction(result, val); } + @Override public com.ibm.wala.cast.ir.ssa.EachElementGetInstruction EachElementGetInstruction(int value, int objectRef) { throw new UnsupportedOperationException(); } + @Override public com.ibm.wala.cast.ir.ssa.EachElementHasNextInstruction EachElementHasNextInstruction(int value, int objectRef) { throw new UnsupportedOperationException(); } + @Override public AstEchoInstruction EchoInstruction(int[] rvals) { throw new UnsupportedOperationException(); } + @Override public AstGlobalRead GlobalRead(int lhs, FieldReference global) { throw new UnsupportedOperationException(); } + @Override public AstGlobalWrite GlobalWrite(FieldReference global, int rhs) { throw new UnsupportedOperationException(); } + @Override public AstIsDefinedInstruction IsDefinedInstruction(int lval, int rval, int fieldVal, FieldReference fieldRef) { throw new UnsupportedOperationException(); } + @Override public AstIsDefinedInstruction IsDefinedInstruction(int lval, int rval, FieldReference fieldRef) { throw new UnsupportedOperationException(); } + @Override public AstIsDefinedInstruction IsDefinedInstruction(int lval, int rval, int fieldVal) { throw new UnsupportedOperationException(); } + @Override public AstIsDefinedInstruction IsDefinedInstruction(int lval, int rval) { throw new UnsupportedOperationException(); } + @Override public AstLexicalRead LexicalRead(Access[] accesses) { return new AstLexicalRead(accesses); } + @Override public AstLexicalRead LexicalRead(Access access) { return new AstLexicalRead(access); } + @Override public AstLexicalRead LexicalRead(int lhs, String definer, String globalName) { return new AstLexicalRead(lhs, definer, globalName); } + @Override public AstLexicalWrite LexicalWrite(Access[] accesses) { return new AstLexicalWrite(accesses); } + @Override public AstLexicalWrite LexicalWrite(Access access) { return new AstLexicalWrite(access); } + @Override public AstLexicalWrite LexicalWrite(String definer, String globalName, int rhs) { return new AstLexicalWrite(definer, globalName, rhs); } @@ -615,6 +658,7 @@ public abstract class JavaSourceLoaderImpl extends ClassLoaderImpl { private static final InstructionFactory insts = new InstructionFactory(); + @Override public InstructionFactory getInstructionFactory() { return insts; } diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ssa/AstJavaAbstractInstructionVisitor.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ssa/AstJavaAbstractInstructionVisitor.java index 78d4a8aad..22db21621 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ssa/AstJavaAbstractInstructionVisitor.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ssa/AstJavaAbstractInstructionVisitor.java @@ -17,10 +17,12 @@ public class AstJavaAbstractInstructionVisitor implements AstJavaInstructionVisitor { + @Override public void visitJavaInvoke(AstJavaInvokeInstruction instruction) { } + @Override public void visitEnclosingObjectReference(EnclosingObjectReference inst) { } diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ssa/AstJavaInvokeInstruction.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ssa/AstJavaInvokeInstruction.java index d8a7fea7c..df128d6c9 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ssa/AstJavaInvokeInstruction.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ssa/AstJavaInvokeInstruction.java @@ -51,6 +51,7 @@ public class AstJavaInvokeInstruction extends FixedParametersLexicalInvokeInstru super(results, params, exception, site, lexicalReads, lexicalWrites); } + @Override protected SSAInstruction copyInstruction(SSAInstructionFactory insts, int results[], int[] params, int exception, Access[] lexicalReads, Access[] lexicalWrites) { return ((AstJavaInstructionFactory) insts).JavaInvokeInstruction(results, params, exception, getCallSite(), lexicalReads, @@ -60,6 +61,7 @@ public class AstJavaInvokeInstruction extends FixedParametersLexicalInvokeInstru /** * @see com.ibm.domo.ssa.SSAInstruction#visit(IVisitor) */ + @Override public void visit(IVisitor v) { ((AstJavaInstructionVisitor) v).visitJavaInvoke(this); } @@ -69,6 +71,7 @@ public class AstJavaInvokeInstruction extends FixedParametersLexicalInvokeInstru * * @see com.ibm.domo.ssa.Instruction#getExceptionTypes() */ + @Override public Collection getExceptionTypes() { return JavaLanguage.getNullPointerException(); } diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ssa/AstJavaNewEnclosingInstruction.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ssa/AstJavaNewEnclosingInstruction.java index 6584e38f0..e741ecf35 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ssa/AstJavaNewEnclosingInstruction.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ssa/AstJavaNewEnclosingInstruction.java @@ -24,10 +24,12 @@ public class AstJavaNewEnclosingInstruction extends SSANewInstruction { int enclosing; + @Override public int getNumberOfUses() { return 1; } + @Override public int getUse(int i) { assert i == 0; return enclosing; @@ -42,14 +44,17 @@ public class AstJavaNewEnclosingInstruction extends SSANewInstruction { return this.enclosing; } + @Override public String toString() { return super.toString() + " ENCLOSING v" + enclosing; } + @Override public SSAInstruction copyForSSA(SSAInstructionFactory insts, int[] defs, int[] uses) { return ((AstJavaInstructionFactory)insts).JavaNewEnclosingInstruction(defs==null? getDef(0): defs[0], getNewSite(), uses==null? enclosing: uses[0]); } + @Override public Collection getExceptionTypes() { return JavaLanguage.getNewScalarExceptions(); } diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ssa/EnclosingObjectReference.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ssa/EnclosingObjectReference.java index c0352d815..c4feba6a1 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ssa/EnclosingObjectReference.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ssa/EnclosingObjectReference.java @@ -35,20 +35,24 @@ public class EnclosingObjectReference extends SSAInstruction { this.type = type; } + @Override public boolean hasDef() { return true; } + @Override public int getDef() { return lval; } + @Override public int getDef(int i) { assert i == 0; return lval; } + @Override public int getNumberOfDefs() { return 1; } @@ -57,26 +61,32 @@ public class EnclosingObjectReference extends SSAInstruction { return type; } + @Override public SSAInstruction copyForSSA(SSAInstructionFactory insts, int[] defs, int[] uses) { return ((AstJavaInstructionFactory) insts).EnclosingObjectReference(defs == null ? lval : defs[0], type); } + @Override public String toString(SymbolTable symbolTable) { return getValueString(symbolTable, lval) + " = enclosing " + type.getName(); } + @Override public void visit(IVisitor v) { ((AstJavaInstructionVisitor) v).visitEnclosingObjectReference(this); } + @Override public int hashCode() { return lval * type.hashCode(); } + @Override public Collection getExceptionTypes() { return Collections.emptySet(); } + @Override public boolean isFallThrough() { return true; } diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/translator/JavaCAst2IRTranslator.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/translator/JavaCAst2IRTranslator.java index 26c30d542..b6c8dddaa 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/translator/JavaCAst2IRTranslator.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/translator/JavaCAst2IRTranslator.java @@ -64,6 +64,7 @@ public class JavaCAst2IRTranslator extends AstTranslator { return (JavaSourceLoaderImpl) loader; } + @Override protected boolean useDefaultInitValues() { return true; } @@ -71,35 +72,42 @@ public class JavaCAst2IRTranslator extends AstTranslator { // Java does not have standalone global variables, and let's not // adopt the nasty JavaScript practice of creating globals without // explicit definitions + @Override protected boolean hasImplicitGlobals() { return false; } + @Override protected TypeReference defaultCatchType() { return TypeReference.JavaLangThrowable; } + @Override protected TypeReference makeType(CAstType type) { return TypeReference.findOrCreate(loader.getReference(), TypeName.string2TypeName(type.getName())); } // Java globals are disguised as fields (statics), so we should never // ask this question when parsing Java code + @Override protected boolean treatGlobalsAsLexicallyScoped() { Assertions.UNREACHABLE(); return false; } + @Override protected void doThrow(WalkContext context, int exception) { context.cfg().addInstruction(insts.ThrowInstruction(exception)); } + @Override public void doArrayRead(WalkContext context, int result, int arrayValue, CAstNode arrayRefNode, int[] dimValues) { TypeReference arrayTypeRef = (TypeReference) arrayRefNode.getChild(1).getValue(); context.cfg().addInstruction(insts.ArrayLoadInstruction(result, arrayValue, dimValues[0], arrayTypeRef)); processExceptions(arrayRefNode, context); } + @Override public void doArrayWrite(WalkContext context, int arrayValue, CAstNode arrayRefNode, int[] dimValues, int rval) { TypeReference arrayTypeRef = arrayRefNode.getKind() == CAstNode.ARRAY_LITERAL ? ((TypeReference) arrayRefNode.getChild(0) .getChild(0).getValue()).getArrayElementType() : (TypeReference) arrayRefNode.getChild(1).getValue(); @@ -109,6 +117,7 @@ public class JavaCAst2IRTranslator extends AstTranslator { processExceptions(arrayRefNode, context); } + @Override protected void doFieldRead(WalkContext context, int result, int receiver, CAstNode elt, CAstNode parent) { // elt is a constant CAstNode whose value is a FieldReference. FieldReference fieldRef = (FieldReference) elt.getValue(); @@ -122,6 +131,7 @@ public class JavaCAst2IRTranslator extends AstTranslator { } } + @Override protected void doFieldWrite(WalkContext context, int receiver, CAstNode elt, CAstNode parent, int rval) { FieldReference fieldRef = (FieldReference) elt.getValue(); @@ -134,11 +144,13 @@ public class JavaCAst2IRTranslator extends AstTranslator { } } + @Override protected void doMaterializeFunction(CAstNode n, WalkContext context, int result, int exception, CAstEntity fn) { // Not possible in Java (no free-standing functions) Assertions.UNREACHABLE("Real functions in Java??? I don't think so!"); } + @Override protected void doNewObject(WalkContext context, CAstNode newNode, int result, Object type, int[] arguments) { TypeReference typeRef = (TypeReference) type; @@ -169,6 +181,7 @@ public class JavaCAst2IRTranslator extends AstTranslator { } } + @Override protected void doCall(WalkContext context, CAstNode call, int result, int exception, CAstNode name, int receiver, int[] arguments) { assert name.getKind() == CAstNode.CONSTANT; CallSiteReference dummySiteRef = (CallSiteReference) name.getValue(); @@ -193,10 +206,12 @@ public class JavaCAst2IRTranslator extends AstTranslator { Assertions.UNREACHABLE("doGlobalRead() called for Java code???"); } + @Override protected void doGlobalWrite(WalkContext context, String name, int rval) { Assertions.UNREACHABLE("doGlobalWrite() called for Java code???"); } + @Override protected void defineField(CAstEntity topEntity, WalkContext definingContext, CAstEntity n) { assert topEntity.getKind() == CAstEntity.TYPE_ENTITY; assert n.getKind() == CAstEntity.FIELD_ENTITY; @@ -214,6 +229,7 @@ public class JavaCAst2IRTranslator extends AstTranslator { // handles abstract method declarations, which do not get defineFunction // called for them + @Override protected void declareFunction(CAstEntity N, WalkContext definingContext) { CAstType.Method methodType = (Method) N.getType(); CAstType owningType = methodType.getDeclaringType(); @@ -226,6 +242,7 @@ public class JavaCAst2IRTranslator extends AstTranslator { ((JavaSourceLoaderImpl) loader).defineAbstractFunction(N, owner); } + @Override protected void defineFunction(CAstEntity N, WalkContext definingContext, AbstractCFG cfg, SymbolTable symtab, boolean hasCatchBlock, Map caughtTypes, boolean hasMonitorOp, AstLexicalInformation lexicalInfo, DebuggingInformation debugInfo) { @@ -247,11 +264,13 @@ public class JavaCAst2IRTranslator extends AstTranslator { debugInfo); } + @Override protected void doPrimitive(int resultVal, WalkContext context, CAstNode primitiveCall) { // For now, no-op (no primitives in normal Java code) Assertions.UNREACHABLE("doPrimitive() called for Java code???"); } + @Override protected String composeEntityName(WalkContext parent, CAstEntity f) { switch (f.getKind()) { case CAstEntity.TYPE_ENTITY: { @@ -295,6 +314,7 @@ public class JavaCAst2IRTranslator extends AstTranslator { } } + @Override protected boolean defineType(CAstEntity type, WalkContext wc) { CAstEntity parentType = getEnclosingType(type); // ((JavaSourceLoaderImpl)loader).defineType(type, @@ -302,6 +322,7 @@ public class JavaCAst2IRTranslator extends AstTranslator { return ((JavaSourceLoaderImpl) loader).defineType(type, type.getType().getName(), parentType) != null; } + @Override protected void leaveThis(CAstNode n, WalkContext c, CAstVisitor visitor) { if (n.getChildCount() == 0) { super.leaveThis(n, c, visitor); @@ -312,12 +333,14 @@ public class JavaCAst2IRTranslator extends AstTranslator { } } + @Override protected boolean visitCast(CAstNode n, WalkContext context, CAstVisitor visitor) { int result = context.currentScope().allocateTempValue(); context.setValue(n, result); return false; } + @Override protected void leaveCast(CAstNode n, WalkContext context, CAstVisitor visitor) { int result = context.getValue(n); CAstType toType = (CAstType) n.getChild(0).getValue(); @@ -347,12 +370,14 @@ processExceptions(n, context); } } + @Override protected boolean visitInstanceOf(CAstNode n, WalkContext context, CAstVisitor visitor) { int result = context.currentScope().allocateTempValue(); context.setValue(n, result); return false; } + @Override protected void leaveInstanceOf(CAstNode n, WalkContext context, CAstVisitor visitor) { int result = context.getValue(n); CAstType type = (CAstType) n.getChild(0).getValue(); @@ -365,6 +390,7 @@ processExceptions(n, context); ref)); } + @Override protected boolean doVisit(CAstNode n, WalkContext wc, CAstVisitor visitor) { if (n.getKind() == CAstNode.MONITOR_ENTER) { visitor.visit(n.getChild(0), wc, visitor); diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/translator/JavaProcedureEntity.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/translator/JavaProcedureEntity.java index 8cd51be5a..2b098003b 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/translator/JavaProcedureEntity.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/translator/JavaProcedureEntity.java @@ -14,6 +14,7 @@ import com.ibm.wala.cast.tree.CAstEntity; public interface JavaProcedureEntity extends CAstEntity { + @Override public String getSignature(); } diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/types/JavaPrimitiveTypeMap.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/types/JavaPrimitiveTypeMap.java index 37a4ecc2e..6f58b85ef 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/types/JavaPrimitiveTypeMap.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/types/JavaPrimitiveTypeMap.java @@ -33,6 +33,7 @@ public class JavaPrimitiveTypeMap { fShortName = shortName; } + @Override public String getName() { return fShortName; } @@ -41,6 +42,7 @@ public class JavaPrimitiveTypeMap { return fLongName; } + @Override public Collection getSupertypes() { return Collections.EMPTY_LIST; } diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/types/JavaType.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/types/JavaType.java index f29341b6d..0eb72eafd 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/types/JavaType.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/types/JavaType.java @@ -16,5 +16,6 @@ package com.ibm.wala.cast.java.types; import com.ibm.wala.cast.tree.CAstType; public interface JavaType extends CAstType.Class { + @Override boolean isInterface(); } diff --git a/com.ibm.wala.cast.js.html.nu_validator/src/com/ibm/wala/cast/js/html/nu_validator/NuValidatorHtmlParser.java b/com.ibm.wala.cast.js.html.nu_validator/src/com/ibm/wala/cast/js/html/nu_validator/NuValidatorHtmlParser.java index 2a5aef99f..ee5ab89fa 100644 --- a/com.ibm.wala.cast.js.html.nu_validator/src/com/ibm/wala/cast/js/html/nu_validator/NuValidatorHtmlParser.java +++ b/com.ibm.wala.cast.js.html.nu_validator/src/com/ibm/wala/cast/js/html/nu_validator/NuValidatorHtmlParser.java @@ -40,6 +40,7 @@ import com.ibm.wala.util.collections.Pair; public class NuValidatorHtmlParser implements IHtmlParser { + @Override public void parse(final URL url, final InputStream reader, final IHtmlCallback handler, final String fileName) { URL xx = null; try { @@ -65,18 +66,22 @@ public class NuValidatorHtmlParser implements IHtmlParser { return r.getLineNumber(); } + @Override public void setDocumentLocator(Locator locator) { this.locator = locator; } + @Override public void startElement(String uri, final String localName, String qName, final Attributes atts) throws SAXException { final Position line = new LineNumberPosition(url, localFileName, locator.getLineNumber()); tags.push(new ITag() { + @Override public String getName() { return localName; } + @Override public Pair getAttributeByName(String name) { if (atts.getValue(name) != null) { return Pair.make(atts.getValue(name), line); @@ -85,6 +90,7 @@ public class NuValidatorHtmlParser implements IHtmlParser { } } + @Override public Map> getAllAttributes() { return new AbstractMap>() { private Set>> es = null; @@ -97,10 +103,12 @@ public class NuValidatorHtmlParser implements IHtmlParser { final int index = i; es.add(new Map.Entry>() { + @Override public String getKey() { return atts.getLocalName(index).toLowerCase(); } + @Override public Pair getValue() { if (atts.getValue(index) != null) { return Pair.make(atts.getValue(index), line); @@ -109,6 +117,7 @@ public class NuValidatorHtmlParser implements IHtmlParser { } } + @Override public Pair setValue(Pair value) { throw new UnsupportedOperationException(); } @@ -120,10 +129,12 @@ public class NuValidatorHtmlParser implements IHtmlParser { }; } + @Override public Position getElementPosition() { return line; } + @Override public Position getContentPosition() { return line; } @@ -132,38 +143,47 @@ public class NuValidatorHtmlParser implements IHtmlParser { handler.handleStartTag(tags.peek()); } + @Override public void endElement(String uri, String localName, String qName) throws SAXException { handler.handleEndTag(tags.pop()); } + @Override public void characters(char[] ch, int start, int length) throws SAXException { handler.handleText(new LineNumberPosition(url, localFileName, locator.getLineNumber() - countLines(ch, start, length)), new String(ch, start, length)); } + @Override public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException { handler.handleText(new LineNumberPosition(url, localFileName, locator.getLineNumber()), new String(ch, start, length)); } + @Override public void startDocument() throws SAXException { // do nothing } + @Override public void endDocument() throws SAXException { // do nothing } + @Override public void startPrefixMapping(String prefix, String uri) throws SAXException { // do nothing } + @Override public void endPrefixMapping(String prefix) throws SAXException { // do nothing } + @Override public void processingInstruction(String target, String data) throws SAXException { // do nothing } + @Override public void skippedEntity(String name) throws SAXException { // do nothing } diff --git a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestAjaxsltCallGraphShapeRhino.java b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestAjaxsltCallGraphShapeRhino.java index 0e52c9ccf..37ce27f09 100644 --- a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestAjaxsltCallGraphShapeRhino.java +++ b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestAjaxsltCallGraphShapeRhino.java @@ -20,6 +20,7 @@ public class TestAjaxsltCallGraphShapeRhino extends TestAjaxsltCallGraphShape { justThisTest(TestAjaxsltCallGraphShapeRhino.class); } + @Override @Before public void setUp() { com.ibm.wala.cast.js.ipa.callgraph.JSCallGraphUtil.setTranslatorFactory(new CAstRhinoTranslatorFactory()); diff --git a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestArgumentSensitivityRhino.java b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestArgumentSensitivityRhino.java index 33c698e5f..88078e56e 100644 --- a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestArgumentSensitivityRhino.java +++ b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestArgumentSensitivityRhino.java @@ -17,7 +17,8 @@ import com.ibm.wala.cast.js.translator.CAstRhinoTranslatorFactory; public class TestArgumentSensitivityRhino extends TestArgumentSensitivity { - @Before + @Override + @Before public void setUp() { JSCallGraphUtil.setTranslatorFactory(new CAstRhinoTranslatorFactory()); } diff --git a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestCorrelatedPairExtractionRhino.java b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestCorrelatedPairExtractionRhino.java index 3f6d96c3a..438b13fde 100644 --- a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestCorrelatedPairExtractionRhino.java +++ b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestCorrelatedPairExtractionRhino.java @@ -22,11 +22,13 @@ import com.ibm.wala.cast.tree.impl.CAstImpl; import com.ibm.wala.classLoader.SourceModule; public class TestCorrelatedPairExtractionRhino extends TestCorrelatedPairExtraction { - protected CorrelationFinder makeCorrelationFinder() { + @Override + protected CorrelationFinder makeCorrelationFinder() { return new CorrelationFinder(new CAstRhinoTranslatorFactory()); } - protected CAstEntity parseJS(CAstImpl ast, SourceModule module) throws IOException { + @Override + protected CAstEntity parseJS(CAstImpl ast, SourceModule module) throws IOException { RhinoToAstTranslator translator = new RhinoToAstTranslator(ast, module, module.getName(), false); CAstEntity entity = null; try { diff --git a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestForInBodyExtractionRhino.java b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestForInBodyExtractionRhino.java index 1726083d3..56075fdb7 100644 --- a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestForInBodyExtractionRhino.java +++ b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestForInBodyExtractionRhino.java @@ -20,7 +20,8 @@ import com.ibm.wala.cast.tree.impl.CAstImpl; import com.ibm.wala.classLoader.SourceModule; public class TestForInBodyExtractionRhino extends TestForInBodyExtraction { - protected CAstEntity parseJS(CAstImpl ast, SourceModule module) throws IOException { + @Override + protected CAstEntity parseJS(CAstImpl ast, SourceModule module) throws IOException { RhinoToAstTranslator translator = new RhinoToAstTranslator(ast, module, module.getName(), false); CAstEntity entity = null; try { diff --git a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestForInLoopHackRhino.java b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestForInLoopHackRhino.java index 89a6146d0..e311a0268 100644 --- a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestForInLoopHackRhino.java +++ b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestForInLoopHackRhino.java @@ -16,7 +16,8 @@ import com.ibm.wala.cast.js.translator.CAstRhinoTranslatorFactory; public class TestForInLoopHackRhino extends TestForInLoopHack { - @Before + @Override + @Before public void setUp() { com.ibm.wala.cast.js.ipa.callgraph.JSCallGraphUtil.setTranslatorFactory(new CAstRhinoTranslatorFactory()); } diff --git a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestJQueryExamplesRhino.java b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestJQueryExamplesRhino.java index ff84f65ad..6234ee49e 100644 --- a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestJQueryExamplesRhino.java +++ b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestJQueryExamplesRhino.java @@ -21,7 +21,8 @@ public class TestJQueryExamplesRhino extends TestJQueryExamples { justThisTest(TestJQueryExamplesRhino.class); } - @Before + @Override + @Before public void setUp() { JSCallGraphUtil.setTranslatorFactory(new CAstRhinoTranslatorFactory()); } diff --git a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestMediawikiCallGraphShapeRhino.java b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestMediawikiCallGraphShapeRhino.java index fb9d14596..c6037220a 100644 --- a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestMediawikiCallGraphShapeRhino.java +++ b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestMediawikiCallGraphShapeRhino.java @@ -20,6 +20,7 @@ public class TestMediawikiCallGraphShapeRhino extends TestMediawikiCallGraphShap justThisTest(TestMediawikiCallGraphShapeRhino.class); } + @Override @Before public void setUp() { com.ibm.wala.cast.js.ipa.callgraph.JSCallGraphUtil.setTranslatorFactory(new CAstRhinoTranslatorFactory()); diff --git a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestRhinoSourceMap.java b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestRhinoSourceMap.java index 2db00dfc1..2d5c95eef 100644 --- a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestRhinoSourceMap.java +++ b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestRhinoSourceMap.java @@ -16,7 +16,6 @@ import static com.ibm.wala.cast.js.ipa.callgraph.JSCallGraphUtil.setTranslatorFa import static com.ibm.wala.cast.js.test.JSCallGraphBuilderUtil.makeScriptScope; import java.io.IOException; -import java.net.URL; import java.util.Map; import junit.framework.Assert; diff --git a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestSimpleCallGraphShapeRhino.java b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestSimpleCallGraphShapeRhino.java index 323fa5eb8..9d55622c8 100644 --- a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestSimpleCallGraphShapeRhino.java +++ b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestSimpleCallGraphShapeRhino.java @@ -29,6 +29,7 @@ public class TestSimpleCallGraphShapeRhino extends TestSimpleCallGraphShape { justThisTest(TestSimpleCallGraphShapeRhino.class); } + @Override @Before public void setUp() { com.ibm.wala.cast.js.ipa.callgraph.JSCallGraphUtil.setTranslatorFactory(new CAstRhinoTranslatorFactory()); diff --git a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestSimplePageCallGraphShapeRhino.java b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestSimplePageCallGraphShapeRhino.java index 147d55b91..ed9f0917c 100644 --- a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestSimplePageCallGraphShapeRhino.java +++ b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestSimplePageCallGraphShapeRhino.java @@ -52,13 +52,16 @@ public abstract class TestSimplePageCallGraphShapeRhino extends TestSimplePageCa justThisTest(TestSimplePageCallGraphShapeRhino.class); } - protected abstract IHtmlParser getParser(); + @Override + protected abstract IHtmlParser getParser(); - @Before + @Override + @Before public void setUp() { com.ibm.wala.cast.js.ipa.callgraph.JSCallGraphUtil.setTranslatorFactory(new CAstRhinoTranslatorFactory()); WebUtil.setFactory(new IHtmlParserFactory() { - public IHtmlParser getParser() { + @Override + public IHtmlParser getParser() { return TestSimplePageCallGraphShapeRhino.this.getParser(); } }); diff --git a/com.ibm.wala.cast.js.rhino/.classpath b/com.ibm.wala.cast.js.rhino/.classpath index 41ccd7f97..42121f797 100644 --- a/com.ibm.wala.cast.js.rhino/.classpath +++ b/com.ibm.wala.cast.js.rhino/.classpath @@ -3,6 +3,6 @@ - + diff --git a/com.ibm.wala.cast.js.rhino/META-INF/MANIFEST.MF b/com.ibm.wala.cast.js.rhino/META-INF/MANIFEST.MF index c0fa3d389..35ce3fb27 100644 --- a/com.ibm.wala.cast.js.rhino/META-INF/MANIFEST.MF +++ b/com.ibm.wala.cast.js.rhino/META-INF/MANIFEST.MF @@ -36,4 +36,4 @@ Export-Package: com.ibm.wala.cast.js.translator, org.mozilla.javascript.xml.impl.xmlbeans, org.mozilla.javascript.xmlimpl Bundle-ClassPath: ., - lib/rhino-1.7R3.jar + lib/js.jar diff --git a/com.ibm.wala.cast.js.rhino/build.properties b/com.ibm.wala.cast.js.rhino/build.properties index 2986328a0..49aa09ae1 100644 --- a/com.ibm.wala.cast.js.rhino/build.properties +++ b/com.ibm.wala.cast.js.rhino/build.properties @@ -2,5 +2,5 @@ source.. = source/ output.. = bin/ bin.includes = META-INF/,\ .,\ - lib/rhino-1.7R3.jar + lib/js.jar jars.extra.classpath = lib/rhino-1.7R3.jar diff --git a/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/cast/js/translator/CAstRhinoTranslator.java b/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/cast/js/translator/CAstRhinoTranslator.java index 7bdb5294f..30cf60b93 100644 --- a/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/cast/js/translator/CAstRhinoTranslator.java +++ b/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/cast/js/translator/CAstRhinoTranslator.java @@ -15,7 +15,6 @@ import java.util.LinkedList; import java.util.List; import com.ibm.wala.cast.ir.translator.TranslatorToCAst; -import com.ibm.wala.cast.ir.translator.TranslatorToCAst.Error; import com.ibm.wala.cast.tree.CAstEntity; import com.ibm.wala.cast.tree.impl.CAstImpl; import com.ibm.wala.cast.tree.rewrite.CAstRewriterFactory; @@ -34,6 +33,7 @@ public class CAstRhinoTranslator implements TranslatorToCAst { this.replicateForDoLoops = replicateForDoLoops; } + @Override public , K extends CopyKey> void addRewriter(CAstRewriterFactory factory, boolean prepend) { if(prepend) rewriters.add(0, factory); @@ -41,6 +41,7 @@ public class CAstRhinoTranslator implements TranslatorToCAst { rewriters.add(factory); } + @Override public CAstEntity translateToCAst() throws IOException, Error { String N; if (M instanceof SourceFileModule) { diff --git a/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/cast/js/translator/CAstRhinoTranslatorFactory.java b/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/cast/js/translator/CAstRhinoTranslatorFactory.java index 57795bb14..9af82b065 100644 --- a/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/cast/js/translator/CAstRhinoTranslatorFactory.java +++ b/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/cast/js/translator/CAstRhinoTranslatorFactory.java @@ -16,7 +16,8 @@ import com.ibm.wala.classLoader.SourceModule; public class CAstRhinoTranslatorFactory implements JavaScriptTranslatorFactory { - public TranslatorToCAst make(CAst ast, SourceModule M) { + @Override + public TranslatorToCAst make(CAst ast, SourceModule M) { return new CAstRhinoTranslator(M, false); } } diff --git a/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/cast/js/translator/RhinoToAstTranslator.java b/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/cast/js/translator/RhinoToAstTranslator.java index e7026392a..af41d49c9 100755 --- a/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/cast/js/translator/RhinoToAstTranslator.java +++ b/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/cast/js/translator/RhinoToAstTranslator.java @@ -415,35 +415,43 @@ public class RhinoToAstTranslator { return ""; } + @Override public String getName() { return name; } + @Override public String getSignature() { Assertions.UNREACHABLE(); return null; } + @Override public int getKind() { return kind; } + @Override public String[] getArgumentNames() { return arguments; } + @Override public CAstNode[] getArgumentDefaults() { return new CAstNode[0]; } + @Override public int getArgumentCount() { return arguments.length; } + @Override public Map> getAllScopedEntities() { return Collections.unmodifiableMap(subs); } + @Override public Iterator getScopedEntities(CAstNode construct) { if (subs.containsKey(construct)) return subs.get(construct).iterator(); @@ -451,35 +459,43 @@ public class RhinoToAstTranslator { return EmptyIterator.instance(); } + @Override public CAstNode getAST() { return ast; } + @Override public CAstControlFlowMap getControlFlow() { return map; } + @Override public CAstSourcePositionMap getSourceMap() { return pos; } + @Override public CAstSourcePositionMap.Position getPosition() { return entityPosition; } + @Override public CAstNodeTypeMap getNodeTypeMap() { return null; } + @Override public Collection getAnnotations() { return null; } + @Override public Collection getQualifiers() { Assertions.UNREACHABLE("JuliansUnnamedCAstEntity$2.getQualifiers()"); return null; } + @Override public CAstType getType() { Assertions.UNREACHABLE("JuliansUnnamedCAstEntity$2.getType()"); return null; @@ -2263,6 +2279,7 @@ private CAstNode[] walkChildren(final Node n, WalkContext context) { class CAstErrorReporter implements ErrorReporter { private Warning w = null; + @Override public void error(final String arg0, final String arg1, final int arg2, final String arg3, int arg4) { w = new Warning(Warning.SEVERE) { @Override @@ -2272,11 +2289,13 @@ private CAstNode[] walkChildren(final Node n, WalkContext context) { }; } + @Override public EvaluatorException runtimeError(String arg0, String arg1, int arg2, String arg3, int arg4) { error(arg0, arg1, arg2, arg3, arg4); return null; } + @Override public void warning(String arg0, String arg1, int arg2, String arg3, int arg4) { // ignore warnings } diff --git a/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/js/rhino/Activator.java b/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/js/rhino/Activator.java index 37f078a23..b6ccfccb2 100644 --- a/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/js/rhino/Activator.java +++ b/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/js/rhino/Activator.java @@ -34,7 +34,8 @@ public class Activator extends Plugin { * (non-Javadoc) * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext) */ - public void start(BundleContext context) throws Exception { + @Override + public void start(BundleContext context) throws Exception { super.start(context); plugin = this; } @@ -43,7 +44,8 @@ public class Activator extends Plugin { * (non-Javadoc) * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext) */ - public void stop(BundleContext context) throws Exception { + @Override + public void stop(BundleContext context) throws Exception { plugin = null; super.stop(context); } diff --git a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/CAstDumper.java b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/CAstDumper.java index d20389728..349b43a77 100644 --- a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/CAstDumper.java +++ b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/CAstDumper.java @@ -100,7 +100,8 @@ public class CAstDumper { m.put(scopedEntity, e.getKey()); } Collections.sort(scopedEntities, new Comparator() { - public int compare(CAstEntity o1, CAstEntity o2) { + @Override + public int compare(CAstEntity o1, CAstEntity o2) { return o1.getName().compareTo(o2.getName()); } }); diff --git a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/JSCallGraphBuilderUtil.java b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/JSCallGraphBuilderUtil.java index eeff153e5..c119e4768 100755 --- a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/JSCallGraphBuilderUtil.java +++ b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/JSCallGraphBuilderUtil.java @@ -84,6 +84,9 @@ public class JSCallGraphBuilderUtil extends com.ibm.wala.cast.js.ipa.callgraph.J } } + /** + * create a CG builder for script. Note that the script at dir/name is loaded via the classloader, not from the filesystem. + */ public static JSCFABuilder makeScriptCGBuilder(String dir, String name, CGBuilderType builderType) throws IOException, WalaException { URL script = getURLforFile(dir, name); CAstRewriterFactory preprocessor = builderType.extractCorrelatedPairs ? new CorrelatedPairExtractorFactory(translatorFactory, script) : null; diff --git a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestCorrelatedPairExtraction.java b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestCorrelatedPairExtraction.java index 32daf6ad1..ce0073179 100644 --- a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestCorrelatedPairExtraction.java +++ b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestCorrelatedPairExtraction.java @@ -89,7 +89,7 @@ public abstract class TestCorrelatedPairExtraction { protected CAstEntity parseJS(File tmp, CAstImpl ast) throws IOException { String moduleName = tmp.getName(); - SourceFileModule module = new SourceFileModule(tmp, moduleName); + SourceFileModule module = new SourceFileModule(tmp, moduleName, null); return parseJS(ast, module); } diff --git a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestForInBodyExtraction.java b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestForInBodyExtraction.java index 68d94c936..b390560a4 100644 --- a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestForInBodyExtraction.java +++ b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestForInBodyExtraction.java @@ -72,7 +72,7 @@ public abstract class TestForInBodyExtraction { protected CAstEntity parseJS(File tmp, CAstImpl ast) throws IOException { String moduleName = tmp.getName(); - SourceFileModule module = new SourceFileModule(tmp, moduleName); + SourceFileModule module = new SourceFileModule(tmp, moduleName, null); return parseJS(ast, module); } diff --git a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestJSCallGraphShape.java b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestJSCallGraphShape.java index c19414167..064812678 100755 --- a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestJSCallGraphShape.java +++ b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestJSCallGraphShape.java @@ -17,6 +17,7 @@ import com.ibm.wala.ipa.callgraph.CallGraph; public abstract class TestJSCallGraphShape extends TestCallGraphShape { + @Override protected Collection getNodes(CallGraph CG, String functionIdentifier) { return JSCallGraphBuilderUtil.getNodes(CG, functionIdentifier); } diff --git a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestSimplePageCallGraphShape.java b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestSimplePageCallGraphShape.java index 3e8c25d7e..8b2bf58b8 100755 --- a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestSimplePageCallGraphShape.java +++ b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestSimplePageCallGraphShape.java @@ -32,9 +32,11 @@ public abstract class TestSimplePageCallGraphShape extends TestJSCallGraphShape protected abstract IHtmlParser getParser(); + @Override @Before public void setUp() { WebUtil.setFactory(new IHtmlParserFactory() { + @Override public IHtmlParser getParser() { return getParser(); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/JavaScriptPlugin.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/JavaScriptPlugin.java index 0dd6d0e41..febd89ea8 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/JavaScriptPlugin.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/JavaScriptPlugin.java @@ -36,14 +36,16 @@ public class JavaScriptPlugin extends Plugin { /** * This method is called upon plug-in activation */ - public void start(BundleContext context) throws Exception { + @Override + public void start(BundleContext context) throws Exception { super.start(context); } /** * This method is called when the plug-in is stopped */ - public void stop(BundleContext context) throws Exception { + @Override + public void stop(BundleContext context) throws Exception { super.stop(context); plugin = null; resourceBundle = null; diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/analysis/typeInference/JSTypeInference.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/analysis/typeInference/JSTypeInference.java index 3bb968ead..6fd54b9c7 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/analysis/typeInference/JSTypeInference.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/analysis/typeInference/JSTypeInference.java @@ -37,30 +37,38 @@ public class JSTypeInference extends AstTypeInference { super(ir, cha, new PointType(cha.lookupClass(JavaScriptTypes.Boolean)), true); } + @Override protected void initialize() { class JSTypeOperatorFactory extends AstTypeOperatorFactory implements com.ibm.wala.cast.js.ssa.JSInstructionVisitor { + @Override public void visitJavaScriptInvoke(JavaScriptInvoke inst) { result = new DeclaredTypeOperator(new ConeType(cha.getRootClass())); } + @Override public void visitJavaScriptPropertyRead(JavaScriptPropertyRead inst) { result = new DeclaredTypeOperator(new ConeType(cha.getRootClass())); } + @Override public void visitTypeOf(JavaScriptTypeOfInstruction inst) { result = new DeclaredTypeOperator(new PointType(cha.lookupClass(JavaScriptTypes.String))); } + @Override public void visitJavaScriptInstanceOf(JavaScriptInstanceOf inst) { result = new DeclaredTypeOperator(new PointType(cha.lookupClass(JavaScriptTypes.Boolean))); } + @Override public void visitJavaScriptPropertyWrite(JavaScriptPropertyWrite inst) { } + @Override public void visitCheckRef(JavaScriptCheckReference instruction) { } + @Override public void visitWithRegion(JavaScriptWithRegion instruction) { } @@ -81,6 +89,7 @@ public class JSTypeInference extends AstTypeInference { return new PointType(cha.lookupClass(typeRef)); } + @Override public IVariable makeVariable(int vn) { if (ir.getSymbolTable().isStringConstant(vn)) { return new TypeVariable(make(JavaScriptTypes.String)); @@ -100,6 +109,7 @@ public class JSTypeInference extends AstTypeInference { init(ir, new JSTypeVarFactory(), new JSTypeOperatorFactory()); } + @Override public TypeAbstraction getConstantType(int valueNumber) { SymbolTable st = ir.getSymbolTable(); if (st.isStringConstant(valueNumber)) { diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/FlowGraph.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/FlowGraph.java index 393287ffb..5cd6cbe95 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/FlowGraph.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/FlowGraph.java @@ -115,6 +115,7 @@ public class FlowGraph implements Iterable { return graph.getSuccNodes(v); } + @Override public Iterator iterator() { return graph.iterator(); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/vertices/AbstractVertexVisitor.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/vertices/AbstractVertexVisitor.java index 8bdbf4385..46140b1bb 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/vertices/AbstractVertexVisitor.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/vertices/AbstractVertexVisitor.java @@ -20,35 +20,43 @@ public class AbstractVertexVisitor implements VertexVisitor { return null; } - public T visitVarVertex(VarVertex varVertex) { + @Override + public T visitVarVertex(VarVertex varVertex) { return visitVertex(varVertex); } - public T visitPropVertex(PropVertex propVertex) { + @Override + public T visitPropVertex(PropVertex propVertex) { return visitVertex(propVertex); } - public T visitUnknownVertex(UnknownVertex unknownVertex) { + @Override + public T visitUnknownVertex(UnknownVertex unknownVertex) { return visitVertex(unknownVertex); } - public T visitFuncVertex(FuncVertex funcVertex) { + @Override + public T visitFuncVertex(FuncVertex funcVertex) { return visitVertex(funcVertex); } - public T visitParamVertex(ParamVertex paramVertex) { + @Override + public T visitParamVertex(ParamVertex paramVertex) { return visitVertex(paramVertex); } - public T visitRetVertex(RetVertex retVertex) { + @Override + public T visitRetVertex(RetVertex retVertex) { return visitVertex(retVertex); } - public T visitCalleeVertex(CallVertex calleeVertex) { + @Override + public T visitCalleeVertex(CallVertex calleeVertex) { return visitVertex(calleeVertex); } - public T visitLexicalAccessVertex(LexicalVarVertex lexicalAccessVertex) { + @Override + public T visitLexicalAccessVertex(LexicalVarVertex lexicalAccessVertex) { return visitVertex(lexicalAccessVertex); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/cfg/JSInducedCFG.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/cfg/JSInducedCFG.java index 0ff1d75ea..2b5451efb 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/cfg/JSInducedCFG.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/cfg/JSInducedCFG.java @@ -37,27 +37,34 @@ public class JSInducedCFG extends AstInducedCFG { super(r); } + @Override public void visitJavaScriptInvoke(JavaScriptInvoke inst) { breakBasicBlock(); } + @Override public void visitJavaScriptPropertyRead(JavaScriptPropertyRead inst) { } + @Override public void visitJavaScriptPropertyWrite(JavaScriptPropertyWrite inst) { } + @Override public void visitTypeOf(JavaScriptTypeOfInstruction inst) { } + @Override public void visitJavaScriptInstanceOf(JavaScriptInstanceOf instruction) { } + @Override public void visitCheckRef(JavaScriptCheckReference instruction) { breakBasicBlock(); } + @Override public void visitWithRegion(JavaScriptWithRegion instruction) { } @@ -77,24 +84,31 @@ public class JSInducedCFG extends AstInducedCFG { super(r); } + @Override public void visitJavaScriptInvoke(JavaScriptInvoke inst) { } + @Override public void visitJavaScriptPropertyRead(JavaScriptPropertyRead inst) { } + @Override public void visitJavaScriptPropertyWrite(JavaScriptPropertyWrite inst) { } + @Override public void visitTypeOf(JavaScriptTypeOfInstruction inst) { } + @Override public void visitJavaScriptInstanceOf(JavaScriptInstanceOf instruction) { } + @Override public void visitCheckRef(JavaScriptCheckReference instruction) { } + @Override public void visitWithRegion(JavaScriptWithRegion instruction) { } @@ -107,10 +121,12 @@ public class JSInducedCFG extends AstInducedCFG { } } + @Override protected BranchVisitor makeBranchVisitor(boolean[] r) { return new JSBranchVisitor(r); } + @Override protected PEIVisitor makePEIVisitor(boolean[] r) { return new JSPEIVisitor(r); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/client/JavaScriptAnalysisEngine.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/client/JavaScriptAnalysisEngine.java index 72259e869..80425faad 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/client/JavaScriptAnalysisEngine.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/client/JavaScriptAnalysisEngine.java @@ -45,6 +45,7 @@ public class JavaScriptAnalysisEngine extends AbstractAnalysisEngine { public JavaScriptAnalysisEngine() { } + @Override public void buildAnalysisScope() { try { loaderFactory = new JavaScriptLoaderFactory(translatorFactory); @@ -57,6 +58,7 @@ public class JavaScriptAnalysisEngine extends AbstractAnalysisEngine { } } + @Override public IClassHierarchy buildClassHierarchy() { try { return ClassHierarchy.make(getScope(), loaderFactory, JavaScriptLoader.JS); @@ -70,14 +72,17 @@ public class JavaScriptAnalysisEngine extends AbstractAnalysisEngine { this.translatorFactory = factory; } + @Override public void setJ2SELibraries(JarFile[] libs) { Assertions.UNREACHABLE("Illegal to call setJ2SELibraries"); } + @Override public void setJ2SELibraries(Module[] libs) { Assertions.UNREACHABLE("Illegal to call setJ2SELibraries"); } + @Override protected Iterable makeDefaultEntrypoints(AnalysisScope scope, IClassHierarchy cha) { return new JavaScriptEntryPoints(cha, cha.getLoader(JavaScriptTypes.jsLoader)); } @@ -87,6 +92,7 @@ public class JavaScriptAnalysisEngine extends AbstractAnalysisEngine { return new AnalysisCache(AstIRFactory.makeDefaultFactory()); } + @Override public AnalysisOptions getDefaultOptions(Iterable roots) { final AnalysisOptions options = new AnalysisOptions(scope, roots); diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/CompositeFileMapping.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/CompositeFileMapping.java index c66591983..e49626ba9 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/CompositeFileMapping.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/CompositeFileMapping.java @@ -10,7 +10,6 @@ *******************************************************************************/ package com.ibm.wala.cast.js.html; -import java.io.PrintStream; import java.util.ArrayList; import java.util.List; @@ -43,11 +42,6 @@ public class CompositeFileMapping implements FileMapping { } @Override - public void dump(PrintStream ps) { - // TODO Auto-generated method stub - - } - public String toString() { return mappings.toString(); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/DomLessSourceExtractor.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/DomLessSourceExtractor.java index fedeb48d4..4ee690d1b 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/DomLessSourceExtractor.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/DomLessSourceExtractor.java @@ -67,6 +67,7 @@ public class DomLessSourceExtractor extends JSSourceExtractor { return governingTag.getElementPosition(); } + @Override public void handleEndTag(ITag tag) { if (tag.getName().equalsIgnoreCase("script")) { assert currentScriptTag != null; @@ -74,6 +75,7 @@ public class DomLessSourceExtractor extends JSSourceExtractor { } } + @Override public void handleText(Position p, String text) { if (currentScriptTag != null) { if (text.startsWith(" extractSources(URL entrypointUrl, IHtmlParser htmlParser, IUrlResolver urlResolver) throws IOException, Error { @@ -304,7 +309,7 @@ public class DomLessSourceExtractor extends JSSourceExtractor { Set res = domLessScopeGenerator.extractSources(entrypointUrl , htmlParser , urlResolver); MappedSourceModule entry = res.iterator().next(); System.out.println(entry); - entry.getMapping().dump(System.out); + System.out.println(entry.getMapping()); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/EmptyFileMapping.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/EmptyFileMapping.java index 858b46bc1..eb6e6b888 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/EmptyFileMapping.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/EmptyFileMapping.java @@ -10,8 +10,6 @@ *******************************************************************************/ package com.ibm.wala.cast.js.html; -import java.io.PrintStream; - import com.ibm.wala.cast.tree.CAstSourcePositionMap.Position; public class EmptyFileMapping implements FileMapping { @@ -21,9 +19,4 @@ public class EmptyFileMapping implements FileMapping { return null; } - @Override - public void dump(PrintStream ps) { - ps.println("empty mapping"); - } - } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/FileMapping.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/FileMapping.java index c3998ee6f..3b15fd6ad 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/FileMapping.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/FileMapping.java @@ -10,8 +10,6 @@ *******************************************************************************/ package com.ibm.wala.cast.js.html; -import java.io.PrintStream; - import com.ibm.wala.cast.tree.CAstSourcePositionMap.Position; public interface FileMapping { @@ -22,6 +20,4 @@ public interface FileMapping { */ public abstract IncludedPosition getIncludedPosition(Position line); - public abstract void dump(PrintStream ps); - } \ No newline at end of file diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/IdentityUrlResolver.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/IdentityUrlResolver.java index 3d36c3f3e..eb115878f 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/IdentityUrlResolver.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/IdentityUrlResolver.java @@ -14,10 +14,12 @@ import java.net.URL; public class IdentityUrlResolver implements IUrlResolver{ + @Override public URL resolve(URL input) { return input; } + @Override public URL deResolve(URL input) { return input; } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/IncludedPosition.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/IncludedPosition.java index 53732d407..80ce86ee9 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/IncludedPosition.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/IncludedPosition.java @@ -12,8 +12,17 @@ package com.ibm.wala.cast.js.html; import com.ibm.wala.cast.tree.CAstSourcePositionMap.Position; +/** + * A {@link Position} for source code that has been included in some enclosing + * file, e.g., JavaScript code included in an HTML file via a script node. + */ public interface IncludedPosition extends Position { + /** + * get the position of the containing script within the enclosing file. E.g., + * for a position in JavaScript code included in an HTML file, returns the + * position of the relevant <script> tag in the HTML + */ Position getIncludePosition(); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/NestedRangeMapping.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/NestedRangeMapping.java index d5095c3a4..f8d3c6811 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/NestedRangeMapping.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/NestedRangeMapping.java @@ -12,7 +12,6 @@ package com.ibm.wala.cast.js.html; import java.io.IOException; import java.io.InputStream; -import java.io.PrintStream; import java.net.URL; import com.ibm.wala.cast.js.html.RangeFileMapping.Range; @@ -80,11 +79,6 @@ public class NestedRangeMapping implements FileMapping { } @Override - public void dump(PrintStream ps) { - // TODO Auto-generated method stub - - } - public String toString() { return range + "(" + innerMapping + ")"; } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/RangeFileMapping.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/RangeFileMapping.java index a6e8dfef5..525e5b6fa 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/RangeFileMapping.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/RangeFileMapping.java @@ -12,7 +12,6 @@ package com.ibm.wala.cast.js.html; import java.io.IOException; import java.io.InputStream; -import java.io.PrintStream; import java.net.URL; import com.ibm.wala.cast.tree.CAstSourcePositionMap.Position; @@ -58,6 +57,7 @@ public class RangeFileMapping implements FileMapping { return rangeEndingLine; } + @Override public String toString() { return "{"+rangeStart+"->"+rangeEnd+"}"; } @@ -74,6 +74,7 @@ public class RangeFileMapping implements FileMapping { includedURL = url; } + @Override public String toString() { return range + ":" + includePosition; } @@ -119,6 +120,7 @@ public class RangeFileMapping implements FileMapping { public Position getIncludePosition() { return includePosition; } + @Override public String toString() { return "[include:"+includePosition+"]"+super.toString(); } @@ -130,10 +132,5 @@ public class RangeFileMapping implements FileMapping { } } - @Override - public void dump(PrintStream ps) { - // TODO Auto-generated method stub - - } } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/SourceRegion.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/SourceRegion.java index 6e8be4f8c..408d3e04d 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/SourceRegion.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/SourceRegion.java @@ -15,9 +15,18 @@ import java.net.URL; import com.ibm.wala.cast.tree.CAstSourcePositionMap.Position; +/** + * Represents a region of source code, with source locations. Regions can be + * added to other {@link SourceRegion}s, with nested source location information + * maintained. + */ public class SourceRegion { private final StringBuilder source = new StringBuilder(); + + /** + * source location information + */ private FileMapping fileMapping; private int currentLine = 1; diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/UnicodeReader.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/UnicodeReader.java index b15ad292f..1ce9c2efc 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/UnicodeReader.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/UnicodeReader.java @@ -109,11 +109,13 @@ public class UnicodeReader extends Reader { } } + @Override public void close() throws IOException { init(); internalIn2.close(); } + @Override public int read(char[] cbuf, int off, int len) throws IOException { init(); return internalIn2.read(cbuf, off, len); diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/WebUtil.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/WebUtil.java index f7e2fccb8..d404e93e5 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/WebUtil.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/WebUtil.java @@ -27,6 +27,7 @@ public class WebUtil { public static final String preamble = "preamble.js"; private static IHtmlParserFactory factory = new IHtmlParserFactory() { + @Override public IHtmlParser getParser() { return new JerichoHtmlParser(); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/jericho/JerichoHtmlParser.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/jericho/JerichoHtmlParser.java index 75a5e1691..73f47f40a 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/jericho/JerichoHtmlParser.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/jericho/JerichoHtmlParser.java @@ -101,7 +101,8 @@ public class JerichoHtmlParser implements IHtmlParser{ Config.LoggerProvider = new CAstLoggerProvider(); } - public void parse(URL url, InputStream reader, IHtmlCallback callback, String fileName) throws TranslatorToCAst.Error { + @Override + public void parse(URL url, InputStream reader, IHtmlCallback callback, String fileName) throws TranslatorToCAst.Error { warnings.clear(); Parser parser = new Parser(callback, fileName); Source src; diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/jericho/JerichoTag.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/jericho/JerichoTag.java index 90c5a4d18..895263208 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/jericho/JerichoTag.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/jericho/JerichoTag.java @@ -103,14 +103,16 @@ public class JerichoTag implements ITag { return result; } - public Map> getAllAttributes() { + @Override + public Map> getAllAttributes() { if (allAttributes == null) { allAttributes = makeAllAttributes(); } return allAttributes; } - public Pair getAttributeByName(String name) { + @Override + public Pair getAttributeByName(String name) { if (allAttributes == null) { allAttributes = makeAllAttributes(); } @@ -128,7 +130,8 @@ public class JerichoTag implements ITag { return sourceFile; } - public String getName() { + @Override + public String getName() { return innerElement.getName(); } @@ -137,11 +140,13 @@ public class JerichoTag implements ITag { return innerElement.toString(); } - public Position getElementPosition() { + @Override + public Position getElementPosition() { return getPosition(innerElement); } - public Position getContentPosition() { + @Override + public Position getContentPosition() { return getPosition(innerElement.getContent()); } } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/ArgumentSpecialization.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/ArgumentSpecialization.java index 75258a53b..f1ccbeb48 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/ArgumentSpecialization.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/ArgumentSpecialization.java @@ -70,6 +70,7 @@ public class ArgumentSpecialization { } } + @Override public DefUse getDU(CGNode node) { if (node.getMethod() instanceof Retranslatable) { return getAnalysisCache().getSSACache().findOrCreateDU(node.getMethod(), node.getContext(), options.getSSAOptions()); @@ -84,15 +85,18 @@ public class ArgumentSpecialization { private final int argumentCount; public static ContextKey ARGUMENT_COUNT = new ContextKey() { + @Override public String toString() { return "argument count key"; } }; + @Override public int hashCode() { return base.hashCode() + (argumentCount * 4073); } + @Override public boolean equals(Object o) { return o.getClass() == this.getClass() && @@ -105,10 +109,12 @@ public class ArgumentSpecialization { this.base = base; } + @Override public ContextItem get(ContextKey name) { return (name == ARGUMENT_COUNT)? ContextItem.Value.make(argumentCount): base.get(name); } + @Override public String toString() { return base.toString() + "(nargs:" + argumentCount + ")"; } @@ -121,6 +127,7 @@ public class ArgumentSpecialization { this.base = base; } + @Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] actualParameters) { Context baseContext = base.getCalleeTarget(caller, site, callee, actualParameters); if (caller.getMethod() instanceof Retranslatable) { @@ -141,6 +148,7 @@ public class ArgumentSpecialization { } } + @Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { return base.getRelevantParameters(caller, site); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/GlobalObjectKey.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/GlobalObjectKey.java index f4fea43ac..37ed56413 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/GlobalObjectKey.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/GlobalObjectKey.java @@ -33,10 +33,12 @@ public class GlobalObjectKey implements InstanceKey { this.concreteType = concreteType; } + @Override public IClass getConcreteType() { return concreteType; } + @Override public String toString() { return "JS Global Object"; } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSCFABuilder.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSCFABuilder.java index 0224c774f..33a4f2f8e 100755 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSCFABuilder.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSCFABuilder.java @@ -105,6 +105,7 @@ public abstract class JSCFABuilder extends JSSSAPropagationCallGraphBuilder { * All values used as property names get implicitly converted to strings in JavaScript. * @see com.ibm.wala.cast.ipa.callgraph.DelegatingAstPointerKeys#getFieldNameType(com.ibm.wala.ipa.callgraph.propagation.InstanceKey) */ + @Override protected IClass getFieldNameType(InstanceKey F) { return F.getConcreteType().getClassHierarchy().lookupClass(JavaScriptTypes.String); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSCallGraph.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSCallGraph.java index d30bd1a93..fc2e27407 100755 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSCallGraph.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSCallGraph.java @@ -50,10 +50,12 @@ public class JSCallGraph extends AstCallGraph { super(fakeRoot, cha.lookupClass(JavaScriptTypes.FakeRoot), cha, options, cache); } + @Override public InducedCFG makeControlFlowGraph(SSAInstruction[] instructions) { return new JSInducedCFG(instructions, this, Everywhere.EVERYWHERE); } + @Override public SSANewInstruction addAllocation(TypeReference T) { if (cha.isSubclassOf(cha.lookupClass(T), cha.lookupClass(JavaScriptTypes.Root))) { int instance = nextLocal++; @@ -66,6 +68,7 @@ public class JSCallGraph extends AstCallGraph { } } + @Override public SSAAbstractInvokeInstruction addDirectCall(int function, int[] params, CallSiteReference site) { CallSiteReference newSite = new JSCallSiteReference(statements.size()); @@ -81,6 +84,7 @@ public class JSCallGraph extends AstCallGraph { return null; } + @Override protected CGNode makeFakeRootNode() throws com.ibm.wala.util.CancelException { return findOrCreateNode(new JSFakeRoot(cha, options, getAnalysisCache()), Everywhere.EVERYWHERE); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSCallGraphUtil.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSCallGraphUtil.java index 7f13debc8..1ce3abbf0 100755 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSCallGraphUtil.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSCallGraphUtil.java @@ -19,6 +19,7 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; +import com.ibm.wala.cast.ipa.callgraph.CAstCallGraphUtil; import com.ibm.wala.cast.ipa.callgraph.StandardFunctionTargetSelector; import com.ibm.wala.cast.ir.translator.TranslatorToCAst; import com.ibm.wala.cast.ir.translator.TranslatorToCAst.Error; @@ -107,6 +108,11 @@ public class JSCallGraphUtil extends com.ibm.wala.cast.ipa.callgraph.CAstCallGra return makeLoaders(null); } + public static IClassHierarchy makeHierarchyForScripts(String... scriptFiles) throws IOException, ClassHierarchyException { + JavaScriptLoaderFactory loaders = makeLoaders(); + AnalysisScope scope = CAstCallGraphUtil.makeScope(scriptFiles, loaders, JavaScriptLoader.JS); + return makeHierarchy(scope, loaders); + } public static IClassHierarchy makeHierarchy(AnalysisScope scope, ClassLoaderFactory loaders) throws ClassHierarchyException { return ClassHierarchy.make(scope, loaders, JavaScriptLoader.JS); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSSSAPropagationCallGraphBuilder.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSSSAPropagationCallGraphBuilder.java index cc331aab0..83fedd8e1 100755 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSSSAPropagationCallGraphBuilder.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSSSAPropagationCallGraphBuilder.java @@ -141,6 +141,7 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph super(cha, options, cache, pointerKeyFactory); } + @Override protected boolean isConstantRef(SymbolTable symbolTable, int valueNumber) { if (valueNumber == -1) { return false; @@ -154,10 +155,12 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph // // /////////////////////////////////////////////////////////////////////////// + @Override protected boolean useObjectCatalog() { return true; } + @Override protected boolean isUncataloguedField(IClass type, String fieldName) { if (!type.getReference().equals(JavaScriptTypes.Object)) { return true; @@ -181,6 +184,7 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph assert f != null : "couldn't resolve " + varName; return getPointerKeyForInstanceField(globalObject, f); } + @Override protected ExplicitCallGraph createEmptyCallGraph(IClassHierarchy cha, AnalysisOptions options) { return new JSCallGraph(cha, options, getAnalysisCache()); } @@ -204,6 +208,7 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph return ti; } + @Override protected void addAssignmentsForCatchPointerKey(PointerKey exceptionVar, Set catchClasses, PointerKey e) { system.newConstraint(exceptionVar, assignOperator, e); } @@ -213,34 +218,42 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph super(vn); } + @Override public void visitBinaryOp(final SSABinaryOpInstruction instruction) { bingo = true; } + @Override public void visitJavaScriptInvoke(JavaScriptInvoke instruction) { bingo = true; } + @Override public void visitJavaScriptPropertyRead(JavaScriptPropertyRead instruction) { bingo = true; } + @Override public void visitJavaScriptPropertyWrite(JavaScriptPropertyWrite instruction) { bingo = true; } + @Override public void visitTypeOf(JavaScriptTypeOfInstruction inst) { bingo = true; } + @Override public void visitJavaScriptInstanceOf(JavaScriptInstanceOf instruction) { bingo = true; } + @Override public void visitCheckRef(JavaScriptCheckReference instruction) { } + @Override public void visitWithRegion(JavaScriptWithRegion instruction) { } @@ -256,6 +269,7 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph } } + @Override protected InterestingVisitor makeInterestingVisitor(CGNode node, int vn) { return new JSInterestingVisitor(vn); } @@ -280,30 +294,37 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph super(analysis, lpk); } + @Override public void visitJavaScriptInvoke(JavaScriptInvoke instruction) { } + @Override public void visitTypeOf(JavaScriptTypeOfInstruction instruction) { } + @Override public void visitJavaScriptPropertyRead(JavaScriptPropertyRead instruction) { } + @Override public void visitJavaScriptPropertyWrite(JavaScriptPropertyWrite instruction) { } + @Override public void visitJavaScriptInstanceOf(JavaScriptInstanceOf instruction) { } + @Override public void visitCheckRef(JavaScriptCheckReference instruction) { } + @Override public void visitWithRegion(JavaScriptWithRegion instruction) { } @@ -338,13 +359,16 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph }; + @Override protected ImplicitPointsToSetVisitor makeImplicitPointsToVisitor(LocalPointerKey lpk) { return new JSImplicitPointsToSetVisitor(this, lpk); } }; + @Override protected PropagationSystem makeSystem(AnalysisOptions options) { return new PropagationSystem(callGraph, pointerKeyFactory, instanceKeyFactory) { + @Override public PointerAnalysis makePointerAnalysis(PropagationCallGraphBuilder builder) { return new JSPointerAnalysisImpl(builder, cg, pointsToMap, instanceKeys, pointerKeyFactory, instanceKeyFactory); } @@ -357,6 +381,7 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph // // /////////////////////////////////////////////////////////////////////////// + @Override protected JSConstraintVisitor makeVisitor(CGNode node) { if (AstSSAPropagationCallGraphBuilder.DEBUG_PROPERTIES) { final IMethod method = node.getMethod(); @@ -387,10 +412,12 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph super(builder, node); } + @Override protected JSSSAPropagationCallGraphBuilder getBuilder() { return (JSSSAPropagationCallGraphBuilder) builder; } + @Override public void visitUnaryOp(SSAUnaryOpInstruction inst) { if (inst.getOpcode() == IUnaryOpInstruction.Operator.NEG) { addLvalTypeKeyConstraint(inst, JavaScriptTypes.Boolean); @@ -411,19 +438,23 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph system.newConstraint(lk, key); } + @Override public void visitIsDefined(AstIsDefinedInstruction inst) { addLvalTypeKeyConstraint(inst, JavaScriptTypes.Boolean); } + @Override public void visitJavaScriptInstanceOf(JavaScriptInstanceOf inst) { addLvalTypeKeyConstraint(inst, JavaScriptTypes.Boolean); } + @Override public void visitEachElementHasNext(EachElementHasNextInstruction inst) { addLvalTypeKeyConstraint(inst, JavaScriptTypes.Boolean); } + @Override public void visitTypeOf(JavaScriptTypeOfInstruction instruction) { addLvalTypeKeyConstraint(instruction, JavaScriptTypes.String); } @@ -476,10 +507,12 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph } + @Override public void visitBinaryOp(final SSABinaryOpInstruction instruction) { handleBinaryOp(instruction, node, symbolTable, du); } + @Override public void visitJavaScriptPropertyRead(JavaScriptPropertyRead instruction) { if (AstSSAPropagationCallGraphBuilder.DEBUG_PROPERTIES) { Position instructionPosition = getInstructionPosition(instruction); @@ -503,6 +536,7 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph return null; } + @Override public void visitJavaScriptPropertyWrite(JavaScriptPropertyWrite instruction) { if (AstSSAPropagationCallGraphBuilder.DEBUG_PROPERTIES) { Position instructionPosition = getInstructionPosition(instruction); @@ -513,6 +547,7 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph newFieldWrite(node, instruction.getUse(0), instruction.getUse(1), instruction.getUse(2)); } + @Override public void visitJavaScriptInvoke(JavaScriptInvoke instruction) { if (instruction.getDeclaredTarget().equals(JavaScriptMethods.dispatchReference)) { handleJavascriptDispatch(instruction); @@ -675,14 +710,17 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph return instruction; } + @Override public String toString() { return "BinOp: " + getInstruction(); } + @Override public int hashCode() { return 17 * getInstruction().getUse(0) * getInstruction().getUse(1); } + @Override public boolean equals(Object o) { if (o instanceof BinaryOperator) { BinaryOperator op = (BinaryOperator) o; @@ -704,6 +742,7 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph } else { final Set temp = HashSetFactory.make(); v.getValue().foreach(new IntSetAction() { + @Override public void act(int keyIndex) { temp.add(system.getInstanceKey(keyIndex)); } @@ -728,6 +767,7 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph } } + @Override public byte evaluate(PointsToSetVariable lhs, final PointsToSetVariable[] rhs) { boolean doDefault = false; byte changed = NOT_CHANGED; @@ -823,11 +863,13 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph } } + @Override public void visitCheckRef(JavaScriptCheckReference instruction) { // TODO Auto-generated method stub } + @Override public void visitWithRegion(JavaScriptWithRegion instruction) { // TODO Auto-generated method stub diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSSyntheticParameterKey.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSSyntheticParameterKey.java index 378b5d7c4..73dfb74a1 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSSyntheticParameterKey.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSSyntheticParameterKey.java @@ -23,16 +23,19 @@ public class JSSyntheticParameterKey extends NodeKey { this.param = param; } + @Override public boolean equals(Object o) { return (o instanceof JSSyntheticParameterKey) && ((JSSyntheticParameterKey)o).param == param && internalEquals(o); } + @Override public int hashCode() { return param*getNode().hashCode(); } + @Override public String toString() { return "p" + param + ":" + getNode().getMethod().getName(); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptConstructTargetSelector.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptConstructTargetSelector.java index b99f679a6..e48211396 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptConstructTargetSelector.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptConstructTargetSelector.java @@ -67,6 +67,7 @@ public class JavaScriptConstructTargetSelector implements MethodTargetSelector { this(ref, summary, declaringClass, ""); } + @Override public String toString() { return ""; } @@ -552,6 +553,7 @@ public class JavaScriptConstructTargetSelector implements MethodTargetSelector { } } + @Override public IMethod getCalleeTarget(CGNode caller, CallSiteReference site, IClass receiver) { if (site.getDeclaredTarget().equals(JavaScriptMethods.ctorReference)) { assert cha.isSubclassOf(receiver, cha.lookupClass(JavaScriptTypes.Root)); diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptConstructorInstanceKeys.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptConstructorInstanceKeys.java index 5b9462baa..6520fb6d9 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptConstructorInstanceKeys.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptConstructorInstanceKeys.java @@ -26,6 +26,7 @@ public class JavaScriptConstructorInstanceKeys implements InstanceKeyFactory { this.base = base; } + @Override public InstanceKey getInstanceKeyForAllocation(CGNode node, NewSiteReference allocation) { if (node.getMethod() instanceof JavaScriptConstructTargetSelector.JavaScriptConstructor) { InstanceKey bk = base.getInstanceKeyForAllocation(node, allocation); @@ -35,18 +36,22 @@ public class JavaScriptConstructorInstanceKeys implements InstanceKeyFactory { } } + @Override public InstanceKey getInstanceKeyForClassObject(TypeReference type) { return base.getInstanceKeyForClassObject(type); } + @Override public InstanceKey getInstanceKeyForConstant(TypeReference type, T S) { return base.getInstanceKeyForConstant(type, S); } + @Override public InstanceKey getInstanceKeyForMultiNewArray(CGNode node, NewSiteReference allocation, int dim) { return base.getInstanceKeyForMultiNewArray(node, allocation, dim); } + @Override public InstanceKey getInstanceKeyForPEI(CGNode node, ProgramCounter instr, TypeReference type) { return base.getInstanceKeyForPEI(node, instr, type); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptEntryPoints.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptEntryPoints.java index 140f2b45f..5dc7d697c 100755 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptEntryPoints.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptEntryPoints.java @@ -20,6 +20,7 @@ import com.ibm.wala.ipa.cha.IClassHierarchy; public class JavaScriptEntryPoints extends ScriptEntryPoints { + @Override protected CallSiteReference makeScriptSite(IMethod m, int pc) { return new JSCallSiteReference(pc); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptFunctionApplyContextSelector.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptFunctionApplyContextSelector.java index 49771f54f..e472f49a4 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptFunctionApplyContextSelector.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptFunctionApplyContextSelector.java @@ -52,6 +52,7 @@ public class JavaScriptFunctionApplyContextSelector implements ContextSelector { this.oneLevel = new OneLevelSiteContextSelector(base); } + @Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { // 0 for function (synthetic apply), 1 for this (function being invoked), 2 // for this arg of function being invoked, @@ -77,6 +78,7 @@ public class JavaScriptFunctionApplyContextSelector implements ContextSelector { this.isNonNullArray = ContextItem.Value.make(isNonNullArray); } + @Override public ContextItem get(ContextKey name) { if (APPLY_NON_NULL_ARGS.equals(name)) { return isNonNullArray; @@ -117,6 +119,7 @@ public class JavaScriptFunctionApplyContextSelector implements ContextSelector { } + @Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { IClass declaringClass = callee.getDeclaringClass(); IMethod method = declaringClass.getMethod(AstMethodReference.fnSelector); diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptFunctionDotCallTargetSelector.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptFunctionDotCallTargetSelector.java index 2663e97aa..58dc7c970 100755 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptFunctionDotCallTargetSelector.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptFunctionDotCallTargetSelector.java @@ -74,6 +74,7 @@ public class JavaScriptFunctionDotCallTargetSelector implements MethodTargetSele * .wala.ipa.callgraph.CGNode, com.ibm.wala.classLoader.CallSiteReference, * com.ibm.wala.classLoader.IClass) */ + @Override public IMethod getCalleeTarget(CGNode caller, CallSiteReference site, IClass receiver) { IMethod method = receiver.getMethod(AstMethodReference.fnSelector); if (method != null) { diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptScopeMappingInstanceKeys.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptScopeMappingInstanceKeys.java index 1de58778a..afb7473e7 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptScopeMappingInstanceKeys.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptScopeMappingInstanceKeys.java @@ -56,6 +56,7 @@ public class JavaScriptScopeMappingInstanceKeys extends ScopeMappingInstanceKeys return function==null? new LexicalParent[0]: function.getParents(); } + @Override protected boolean needsScopeMappingKey(InstanceKey base) { return cha.isSubclassOf(base.getConcreteType(), codeBody) diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/LoadFileTargetSelector.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/LoadFileTargetSelector.java index cab685b70..25180c415 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/LoadFileTargetSelector.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/LoadFileTargetSelector.java @@ -48,6 +48,7 @@ public class LoadFileTargetSelector implements MethodTargetSelector { private final HashSet loadedFiles = HashSetFactory.make(); + @Override public IMethod getCalleeTarget(CGNode caller, CallSiteReference site, IClass receiver) { IMethod target = base.getCalleeTarget(caller, site, receiver); if (target != null && target.getReference().equals(loadFileFunRef)) { diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/ObjectSensitivityContextSelector.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/ObjectSensitivityContextSelector.java index b4b8ebbcd..4b0e41fdc 100755 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/ObjectSensitivityContextSelector.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/ObjectSensitivityContextSelector.java @@ -62,6 +62,7 @@ public class ObjectSensitivityContextSelector implements ContextSelector { return false; } + @Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] arguments) { Context baseContext = base.getCalleeTarget(caller, site, callee, arguments); if(returnsThis(callee)) { @@ -72,6 +73,7 @@ public class ObjectSensitivityContextSelector implements ContextSelector { return baseContext; } + @Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { if (caller.getIR().getCalls(site)[0].getNumberOfUses() > 1) { return IntSetUtil.make(new int[]{1}).union(base.getRelevantParameters(caller, site)); diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/PropertyNameContextSelector.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/PropertyNameContextSelector.java index ec5d4d8fa..c14306c5e 100755 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/PropertyNameContextSelector.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/PropertyNameContextSelector.java @@ -14,13 +14,10 @@ import java.util.Collections; import java.util.HashMap; import com.ibm.wala.cast.ir.ssa.AbstractReflectiveGet; -import com.ibm.wala.cast.ir.ssa.AstIRFactory; import com.ibm.wala.cast.ir.ssa.AstIsDefinedInstruction; import com.ibm.wala.cast.js.ipa.callgraph.correlations.CorrelationFinder; import com.ibm.wala.cast.js.ipa.callgraph.correlations.extraction.ClosureExtractor; -import com.ibm.wala.cast.js.types.JavaScriptTypes; import com.ibm.wala.classLoader.CallSiteReference; -import com.ibm.wala.classLoader.IClass; import com.ibm.wala.classLoader.IMethod; import com.ibm.wala.ipa.callgraph.AnalysisCache; import com.ibm.wala.ipa.callgraph.CGNode; @@ -28,18 +25,14 @@ import com.ibm.wala.ipa.callgraph.Context; import com.ibm.wala.ipa.callgraph.ContextItem; import com.ibm.wala.ipa.callgraph.ContextKey; import com.ibm.wala.ipa.callgraph.ContextSelector; -import com.ibm.wala.ipa.callgraph.impl.Everywhere; -import com.ibm.wala.ipa.callgraph.propagation.ConcreteTypeKey; import com.ibm.wala.ipa.callgraph.propagation.ConstantKey; import com.ibm.wala.ipa.callgraph.propagation.FilteredPointerKey.SingleInstanceFilter; import com.ibm.wala.ipa.callgraph.propagation.InstanceKey; import com.ibm.wala.ssa.DefUse; -import com.ibm.wala.ssa.IR; import com.ibm.wala.ssa.ReflectiveMemberAccess; import com.ibm.wala.ssa.SSAAbstractInvokeInstruction; import com.ibm.wala.ssa.SSAGetInstruction; import com.ibm.wala.ssa.SSAInstruction; -import com.ibm.wala.ssa.SSAOptions; import com.ibm.wala.types.MethodReference; import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.collections.Iterator2Iterable; @@ -211,6 +204,7 @@ public class PropertyNameContextSelector implements ContextSelector { return f; } + @Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, final InstanceKey[] receiver) { Context baseContext = base.getCalleeTarget(caller, site, callee, receiver); @@ -234,6 +228,7 @@ public class PropertyNameContextSelector implements ContextSelector { } + @Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { if (caller.getIR().getCalls(site)[0].getNumberOfUses() > index) { return IntSetUtil.make(new int[]{index}).union(base.getRelevantParameters(caller, site)); diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/SelectiveCPAContext.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/SelectiveCPAContext.java index 65c41bbdb..993f500f3 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/SelectiveCPAContext.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/SelectiveCPAContext.java @@ -44,6 +44,7 @@ public class SelectiveCPAContext implements Context { hashCode = base.hashCode() ^ parameterObjs.hashCode(); } + @Override public ContextItem get(ContextKey name) { if (parameterObjs.containsKey(name)) { return new FilteredPointerKey.SingleInstanceFilter(parameterObjs.get(name)); diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/TransitivePrototypeKey.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/TransitivePrototypeKey.java index d5a85293c..f4ce25f44 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/TransitivePrototypeKey.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/TransitivePrototypeKey.java @@ -23,15 +23,18 @@ public class TransitivePrototypeKey extends AbstractFieldPointerKey { super(object); } + @Override public boolean equals(Object x) { return (x instanceof TransitivePrototypeKey) && ((TransitivePrototypeKey)x).getInstanceKey().equals(getInstanceKey()); } + @Override public int hashCode() { return getInstanceKey().hashCode(); } + @Override public String toString() { return ""; } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/CorrelationFinder.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/CorrelationFinder.java index 05e1d5037..228b8bb1f 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/CorrelationFinder.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/CorrelationFinder.java @@ -244,6 +244,7 @@ public class CorrelationFinder { correlations.addAll(summary.pp()); Collections.sort(correlations, new Comparator>() { + @Override @SuppressWarnings("unchecked") public int compare(Pair o1, Pair o2) { return o1.fst.compareTo(o2.fst); diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/ClosureExtractor.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/ClosureExtractor.java index 5f05ea121..a9ecde373 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/ClosureExtractor.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/ClosureExtractor.java @@ -50,7 +50,6 @@ import com.ibm.wala.cast.tree.impl.CAstControlFlowRecorder; import com.ibm.wala.cast.tree.impl.CAstOperator; import com.ibm.wala.cast.tree.impl.CAstSymbolImpl; import com.ibm.wala.cast.tree.rewrite.CAstBasicRewriter.NoKey; -import com.ibm.wala.cast.util.CAstPrinter; import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.collections.HashSetFactory; import com.ibm.wala.util.collections.Pair; @@ -534,10 +533,15 @@ public class ClosureExtractor extends CAstRewriterExt { theChildren.putAll(copyChildren(root.getChild(i), nodes, entity.getAllScopedEntities())); Rewrite rw = new Rewrite() { + @Override public CAstNode newRoot() { return newRoot; } + @Override public CAstControlFlowMap newCfg() { return theCfg; } + @Override public CAstSourcePositionMap newPos() { return theSource; } + @Override public CAstNodeTypeMap newTypes() { return theTypes; } + @Override public Map> newChildren() { return theChildren; } }; new_entity.setRewrite(rw); diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/CorrelatedPairExtractorFactory.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/CorrelatedPairExtractorFactory.java index f2c233b7d..1b2bf4131 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/CorrelatedPairExtractorFactory.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/CorrelatedPairExtractorFactory.java @@ -13,7 +13,6 @@ package com.ibm.wala.cast.js.ipa.callgraph.correlations.extraction; import java.io.IOException; import java.net.URL; -import java.util.Collection; import java.util.Map; import com.ibm.wala.cast.js.ipa.callgraph.correlations.CorrelationFinder; @@ -42,6 +41,7 @@ public class CorrelatedPairExtractorFactory implements CAstRewriterFactory> getAllScopedEntities() { + @Override + public Map> getAllScopedEntities() { if(scopedEntities == null) { scopedEntities = HashMapFactory.make(); // first, add all existing entities inside the body of this for loop @@ -126,7 +133,8 @@ class ExtractedFunction implements CAstEntity { return scopedEntities; } - public Iterator getScopedEntities(CAstNode construct) { + @Override + public Iterator getScopedEntities(CAstNode construct) { if(getAllScopedEntities().containsKey(construct)) { return getAllScopedEntities().get(construct).iterator(); } else { @@ -134,31 +142,38 @@ class ExtractedFunction implements CAstEntity { } } - public CAstNode getAST() { + @Override + public CAstNode getAST() { return root; } - public CAstControlFlowMap getControlFlow() { + @Override + public CAstControlFlowMap getControlFlow() { return cfg; } - public CAstSourcePositionMap getSourceMap() { + @Override + public CAstSourcePositionMap getSourceMap() { return posmap; } - public Position getPosition() { + @Override + public Position getPosition() { return getSourceMap().getPosition(root); } - public CAstNodeTypeMap getNodeTypeMap() { + @Override + public CAstNodeTypeMap getNodeTypeMap() { return types; } - public Collection getQualifiers() { + @Override + public Collection getQualifiers() { return null; } - public CAstType getType() { + @Override + public CAstType getType() { return null; } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/NodePos.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/NodePos.java index a0a5408a8..ff4888ee2 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/NodePos.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/NodePos.java @@ -26,7 +26,8 @@ import com.ibm.wala.cast.tree.rewrite.CAstBasicRewriter.NoKey; public abstract class NodePos implements CAstRewriter.RewriteContext { public abstract A accept(PosSwitch ps); - public NoKey key() { + @Override + public NoKey key() { return null; } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/summaries/JavaScriptSummarizedFunction.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/summaries/JavaScriptSummarizedFunction.java index a7e2ad784..cd4ca9365 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/summaries/JavaScriptSummarizedFunction.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/summaries/JavaScriptSummarizedFunction.java @@ -25,10 +25,12 @@ public class JavaScriptSummarizedFunction extends SummarizedMethod { super(ref, summary, declaringClass); } + @Override public boolean equals(Object o) { return this == o; } + @Override public InducedCFG makeControlFlowGraph(SSAInstruction[] instructions) { return new JSInducedCFG(instructions, this, Everywhere.EVERYWHERE); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/summaries/JavaScriptSummary.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/summaries/JavaScriptSummary.java index b7a1acc02..635f56ac6 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/summaries/JavaScriptSummary.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/summaries/JavaScriptSummary.java @@ -33,10 +33,12 @@ public class JavaScriptSummary extends MethodSummary { } + @Override public int getNumberOfParameters() { return declaredParameters; } + @Override public TypeReference getParameterType(int i) { return JavaScriptTypes.Root; } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/loader/JSCallSiteReference.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/loader/JSCallSiteReference.java index debf4d214..ff978cd13 100755 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/loader/JSCallSiteReference.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/loader/JSCallSiteReference.java @@ -23,6 +23,7 @@ public class JSCallSiteReference extends CallSiteReference { public static enum Dispatch implements IInvokeInstruction.IDispatch { JS_CALL; + @Override public boolean hasImplicitThis() { return false; } @@ -36,10 +37,12 @@ public class JSCallSiteReference extends CallSiteReference { this(AstMethodReference.fnReference(JavaScriptTypes.CodeBody), pc); } + @Override public IInvokeInstruction.IDispatch getInvocationCode() { return Dispatch.JS_CALL; } + @Override public String toString() { return "JSCall@" + getProgramCounter(); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/loader/JavaScriptLoader.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/loader/JavaScriptLoader.java index 76e1760f4..9e00784e2 100755 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/loader/JavaScriptLoader.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/loader/JavaScriptLoader.java @@ -127,18 +127,22 @@ public class JavaScriptLoader extends CAstAbstractModuleLoader { JSPrimitiveType.init(); } + @Override public Atom getName() { return Atom.findOrCreateUnicodeAtom("JavaScript"); } + @Override public TypeReference getRootType() { return JavaScriptTypes.Root; } + @Override public TypeReference getThrowableType() { return JavaScriptTypes.Root; } + @Override public TypeReference getConstantType(Object o) { if (o == null) { return JavaScriptTypes.Null; @@ -161,14 +165,17 @@ public class JavaScriptLoader extends CAstAbstractModuleLoader { } } + @Override public boolean isNullType(TypeReference type) { return type.equals(JavaScriptTypes.Undefined) || type.equals(JavaScriptTypes.Null); } + @Override public TypeReference[] getArrayInterfaces() { return new TypeReference[0]; } + @Override public TypeName lookupPrimitiveType(String name) { if ("Boolean".equals(name)) { return JavaScriptTypes.Boolean.getName(); @@ -184,61 +191,75 @@ public class JavaScriptLoader extends CAstAbstractModuleLoader { } } + @Override public Collection inferInvokeExceptions(MethodReference target, IClassHierarchy cha) throws InvalidClassFileException { return Collections.singleton(JavaScriptTypes.Root); } + @Override public Object getMetadataToken(Object value) { assert false; return null; } + @Override public TypeReference getPointerType(TypeReference pointee) throws UnsupportedOperationException { throw new UnsupportedOperationException("JavaScript does not permit explicit pointers"); } + @Override public JSInstructionFactory instructionFactory() { return new JSInstructionFactory() { + @Override public JavaScriptCheckReference CheckReference(int ref) { return new JavaScriptCheckReference(ref); } + @Override public SSAGetInstruction GetInstruction(int result, int ref, String field) { return GetInstruction(result, ref, FieldReference.findOrCreate(JavaScriptTypes.Root, Atom.findOrCreateUnicodeAtom(field), JavaScriptTypes.Root)); } + @Override public JavaScriptInstanceOf InstanceOf(int result, int objVal, int typeVal) { return new JavaScriptInstanceOf(result, objVal, typeVal); } + @Override public JavaScriptInvoke Invoke(int function, int[] results, int[] params, int exception, CallSiteReference site) { return new JavaScriptInvoke(function, results, params, exception, site); } + @Override public JavaScriptInvoke Invoke(int function, int[] results, int[] params, int exception, CallSiteReference site, Access[] lexicalReads, Access[] lexicalWrites) { return new JavaScriptInvoke(function, results, params, exception, site, lexicalReads, lexicalWrites); } + @Override public JavaScriptInvoke Invoke(int function, int result, int[] params, int exception, CallSiteReference site) { return new JavaScriptInvoke(function, result, params, exception, site); } + @Override public JavaScriptInvoke Invoke(int function, int[] params, int exception, CallSiteReference site) { return new JavaScriptInvoke(function, params, exception, site); } + @Override public JavaScriptPropertyRead PropertyRead(int result, int objectRef, int memberRef) { return new JavaScriptPropertyRead(result, objectRef, memberRef); } + @Override public JavaScriptPropertyWrite PropertyWrite(int objectRef, int memberRef, int value) { return new JavaScriptPropertyWrite(objectRef, memberRef, value); } + @Override public SSAPutInstruction PutInstruction(int ref, int value, String field) { try { byte[] utf8 = field.getBytes("UTF-8"); @@ -250,101 +271,126 @@ public class JavaScriptLoader extends CAstAbstractModuleLoader { } } + @Override public JavaScriptTypeOfInstruction TypeOfInstruction(int lval, int object) { return new JavaScriptTypeOfInstruction(lval, object); } + @Override public JavaScriptWithRegion WithRegion(int expr, boolean isEnter) { return new JavaScriptWithRegion(expr, isEnter); } + @Override public AstAssertInstruction AssertInstruction(int value, boolean fromSpecification) { return new AstAssertInstruction(value, fromSpecification); } + @Override public com.ibm.wala.cast.ir.ssa.AssignInstruction AssignInstruction(int result, int val) { return new AssignInstruction(result, val); } + @Override public com.ibm.wala.cast.ir.ssa.EachElementGetInstruction EachElementGetInstruction(int value, int objectRef) { return new EachElementGetInstruction(value, objectRef); } + @Override public com.ibm.wala.cast.ir.ssa.EachElementHasNextInstruction EachElementHasNextInstruction(int value, int objectRef) { return new EachElementHasNextInstruction(value, objectRef); } + @Override public AstEchoInstruction EchoInstruction(int[] rvals) { return new AstEchoInstruction(rvals); } + @Override public AstGlobalRead GlobalRead(int lhs, FieldReference global) { return new AstGlobalRead(lhs, global); } + @Override public AstGlobalWrite GlobalWrite(FieldReference global, int rhs) { return new AstGlobalWrite(global, rhs); } + @Override public AstIsDefinedInstruction IsDefinedInstruction(int lval, int rval, int fieldVal, FieldReference fieldRef) { return new AstIsDefinedInstruction(lval, rval, fieldVal, fieldRef); } + @Override public AstIsDefinedInstruction IsDefinedInstruction(int lval, int rval, FieldReference fieldRef) { return new AstIsDefinedInstruction(lval, rval, fieldRef); } + @Override public AstIsDefinedInstruction IsDefinedInstruction(int lval, int rval, int fieldVal) { return new AstIsDefinedInstruction(lval, rval, fieldVal); } + @Override public AstIsDefinedInstruction IsDefinedInstruction(int lval, int rval) { return new AstIsDefinedInstruction(lval, rval); } + @Override public AstLexicalRead LexicalRead(Access[] accesses) { return new AstLexicalRead(accesses); } + @Override public AstLexicalRead LexicalRead(Access access) { return new AstLexicalRead(access); } + @Override public AstLexicalRead LexicalRead(int lhs, String definer, String globalName) { return new AstLexicalRead(lhs, definer, globalName); } + @Override public AstLexicalWrite LexicalWrite(Access[] accesses) { return new AstLexicalWrite(accesses); } + @Override public AstLexicalWrite LexicalWrite(Access access) { return new AstLexicalWrite(access); } + @Override public AstLexicalWrite LexicalWrite(String definer, String globalName, int rhs) { return new AstLexicalWrite(definer, globalName, rhs); } + @Override public SSAArrayLengthInstruction ArrayLengthInstruction(int result, int arrayref) { throw new UnsupportedOperationException(); } + @Override public SSAArrayLoadInstruction ArrayLoadInstruction(int result, int arrayref, int index, TypeReference declaredType) { throw new UnsupportedOperationException(); } + @Override public SSAArrayStoreInstruction ArrayStoreInstruction(int arrayref, int index, int value, TypeReference declaredType) { throw new UnsupportedOperationException(); } + @Override public SSABinaryOpInstruction BinaryOpInstruction(IOperator operator, boolean overflow, boolean unsigned, int result, int val1, int val2, boolean mayBeInteger) { return new SSABinaryOpInstruction(operator, result, val1, val2, mayBeInteger) { + @Override public boolean isPEI() { return false; } + @Override public SSAInstruction copyForSSA(SSAInstructionFactory insts, int[] defs, int[] uses) { return insts.BinaryOpInstruction(getOperator(), false, false, defs == null || defs.length == 0 ? getDef(0) : defs[0], uses == null ? getUse(0) : uses[0], uses == null ? getUse(1) : uses[1], mayBeIntegerOp()); @@ -352,33 +398,40 @@ public class JavaScriptLoader extends CAstAbstractModuleLoader { }; } + @Override public SSACheckCastInstruction CheckCastInstruction(int result, int val, TypeReference[] types, boolean isPEI) { throw new UnsupportedOperationException(); } + @Override public SSACheckCastInstruction CheckCastInstruction(int result, int val, int[] typeValues, boolean isPEI) { throw new UnsupportedOperationException(); } + @Override public SSACheckCastInstruction CheckCastInstruction(int result, int val, int typeValue, boolean isPEI) { assert isPEI; return CheckCastInstruction(result, val, new int[]{ typeValue }, true); } + @Override public SSACheckCastInstruction CheckCastInstruction(int result, int val, TypeReference type, boolean isPEI) { assert isPEI; return CheckCastInstruction(result, val, new TypeReference[]{ type }, true); } + @Override public SSAComparisonInstruction ComparisonInstruction(Operator operator, int result, int val1, int val2) { return new SSAComparisonInstruction(operator, result, val1, val2); } + @Override public SSAConditionalBranchInstruction ConditionalBranchInstruction( com.ibm.wala.shrikeBT.IConditionalBranchInstruction.IOperator operator, TypeReference type, int val1, int val2) { return new SSAConditionalBranchInstruction(operator, type, val1, val2); } + @Override public SSAConversionInstruction ConversionInstruction(int result, int val, TypeReference fromType, TypeReference toType, boolean overflow) { assert !overflow; @@ -394,127 +447,158 @@ public class JavaScriptLoader extends CAstAbstractModuleLoader { }; } + @Override public SSAGetCaughtExceptionInstruction GetCaughtExceptionInstruction(int bbNumber, int exceptionValueNumber) { return new SSAGetCaughtExceptionInstruction(bbNumber, exceptionValueNumber); } + @Override public SSAGetInstruction GetInstruction(int result, FieldReference field) { throw new UnsupportedOperationException(); } + @Override public SSAGetInstruction GetInstruction(int result, int ref, FieldReference field) { return new SSAGetInstruction(result, ref, field) { + @Override public boolean isPEI() { return false; } }; } + @Override public SSAGotoInstruction GotoInstruction() { return new SSAGotoInstruction(); } + @Override public SSAInstanceofInstruction InstanceofInstruction(int result, int ref, TypeReference checkedType) { throw new UnsupportedOperationException(); } + @Override public SSAInvokeInstruction InvokeInstruction(int result, int[] params, int exception, CallSiteReference site) { throw new UnsupportedOperationException(); } + @Override public SSAInvokeInstruction InvokeInstruction(int[] params, int exception, CallSiteReference site) { throw new UnsupportedOperationException(); } + @Override public SSALoadMetadataInstruction LoadMetadataInstruction(int lval, TypeReference entityType, Object token) { throw new UnsupportedOperationException(); } + @Override public SSAMonitorInstruction MonitorInstruction(int ref, boolean isEnter) { throw new UnsupportedOperationException(); } + @Override public SSANewInstruction NewInstruction(int result, NewSiteReference site) { return new SSANewInstruction(result, site) { + @Override public boolean isPEI() { return true; } + @Override public Collection getExceptionTypes() { return Collections.singleton(JavaScriptTypes.TypeError); } }; } + @Override public SSANewInstruction NewInstruction(int result, NewSiteReference site, int[] params) { throw new UnsupportedOperationException(); } + @Override public SSAPhiInstruction PhiInstruction(int result, int[] params) { return new SSAPhiInstruction(result, params); } + @Override public SSAPiInstruction PiInstruction(int result, int val, int piBlock, int successorBlock, SSAInstruction cause) { return new SSAPiInstruction(result, val, piBlock, successorBlock, cause); } + @Override public SSAPutInstruction PutInstruction(int ref, int value, FieldReference field) { return new SSAPutInstruction(ref, value, field) { + @Override public boolean isPEI() { return false; } }; } + @Override public SSAPutInstruction PutInstruction(int value, FieldReference field) { throw new UnsupportedOperationException(); } + @Override public SSAReturnInstruction ReturnInstruction() { return new SSAReturnInstruction(); } + @Override public SSAReturnInstruction ReturnInstruction(int result, boolean isPrimitive) { return new SSAReturnInstruction(result, isPrimitive); } + @Override public SSASwitchInstruction SwitchInstruction(int val, int defaultLabel, int[] casesAndLabels) { return new SSASwitchInstruction(val, defaultLabel, casesAndLabels); } + @Override public SSAThrowInstruction ThrowInstruction(int exception) { return new SSAThrowInstruction(exception) { + @Override public boolean isPEI() { return true; } + @Override public Collection getExceptionTypes() { return Collections.emptySet(); } }; } + @Override public SSAUnaryOpInstruction UnaryOpInstruction(com.ibm.wala.shrikeBT.IUnaryOpInstruction.IOperator operator, int result, int val) { return new SSAUnaryOpInstruction(operator, result, val); } + @Override public SSAAddressOfInstruction AddressOfInstruction(int lval, int local, TypeReference pointeeType) { throw new UnsupportedOperationException(); } + @Override public SSAAddressOfInstruction AddressOfInstruction(int lval, int local, int indexVal, TypeReference pointeeType) { throw new UnsupportedOperationException(); } + @Override public SSAAddressOfInstruction AddressOfInstruction(int lval, int local, FieldReference field, TypeReference pointeeType) { throw new UnsupportedOperationException(); } + @Override public SSALoadIndirectInstruction LoadIndirectInstruction(int lval, TypeReference t, int addressVal) { throw new UnsupportedOperationException(); } + @Override public SSAStoreIndirectInstruction StoreIndirectInstruction(int addressVal, int rval, TypeReference t) { throw new UnsupportedOperationException(); } @@ -532,50 +616,62 @@ public class JavaScriptLoader extends CAstAbstractModuleLoader { }; } + @Override public boolean isDoubleType(TypeReference type) { return type == JavaScriptTypes.Number || type == JavaScriptTypes.NumberObject; } + @Override public boolean isFloatType(TypeReference type) { return false; } + @Override public boolean isIntType(TypeReference type) { return false; } + @Override public boolean isLongType(TypeReference type) { return false; } + @Override public boolean isMetadataType(TypeReference type) { return false; } + @Override public boolean isStringType(TypeReference type) { return type == JavaScriptTypes.String || type == JavaScriptTypes.StringObject; } + @Override public boolean isVoidType(TypeReference type) { return false; } + @Override public TypeReference getMetadataType() { return null; } + @Override public TypeReference getStringType() { return JavaScriptTypes.String; } + @Override public PrimitiveType getPrimitive(TypeReference reference) { return JSPrimitiveType.getPrimitive(reference); } + @Override public boolean isBooleanType(TypeReference type) { return JavaScriptTypes.Boolean.equals(type); } + @Override public boolean isCharType(TypeReference type) { return false; } @@ -610,10 +706,12 @@ public class JavaScriptLoader extends CAstAbstractModuleLoader { superClass = superRef == null ? null : loader.lookupClass(superRef.getName()); } + @Override public IClassHierarchy getClassHierarchy() { return cha; } + @Override public String toString() { return "JS:" + getReference().toString(); } @@ -642,18 +740,22 @@ public class JavaScriptLoader extends CAstAbstractModuleLoader { types.put(JavaScriptTypes.Root.getName(), this); } + @Override public IClassHierarchy getClassHierarchy() { return cha; } + @Override public String toString() { return "JS Root:" + getReference().toString(); } + @Override public Collection getDirectInterfaces() { return Collections.emptySet(); } + @Override public IClass getSuperclass() { return null; } @@ -676,6 +778,7 @@ public class JavaScriptLoader extends CAstAbstractModuleLoader { this.entity = entity; } + @Override public IClassHierarchy getClassHierarchy() { return cha; } @@ -715,27 +818,33 @@ public class JavaScriptLoader extends CAstAbstractModuleLoader { } + @Override public CAstEntity getEntity() { return entity; } + @Override public void retranslate(AstTranslator xlator) { xlator.translate(entity, translationContext); } + @Override public IClassHierarchy getClassHierarchy() { return cha; } + @Override public String toString() { return ""; } + @Override public TypeReference[] getDeclaredExceptions() { return null; } + @Override public LexicalParent[] getParents() { if (lexicalInfo() == null) return new LexicalParent[0]; @@ -751,10 +860,12 @@ public class JavaScriptLoader extends CAstAbstractModuleLoader { final int hack = i; final AstMethod method = (AstMethod) lookupClass(parents[i], cha).getMethod(AstMethodReference.fnSelector); result[i] = new LexicalParent() { + @Override public String getName() { return parents[hack]; } + @Override public AstMethod getMethod() { return method; } @@ -768,10 +879,12 @@ public class JavaScriptLoader extends CAstAbstractModuleLoader { return result; } + @Override public String getLocalVariableName(int bcIndex, int localNumber) { return null; } + @Override public boolean hasLocalVariableTable() { return false; } @@ -786,6 +899,7 @@ public class JavaScriptLoader extends CAstAbstractModuleLoader { return -1; } + @Override public TypeReference getParameterType(int i) { if (i == 0) { return getDeclaringClass().getReference(); @@ -864,14 +978,17 @@ public class JavaScriptLoader extends CAstAbstractModuleLoader { final JavaScriptClass STRING_OBJECT = new JavaScriptClass(this, JavaScriptTypes.StringObject, JavaScriptTypes.Object, null); + @Override public Language getLanguage() { return JS; } + @Override public ClassLoaderReference getReference() { return JavaScriptTypes.jsLoader; } + @Override public SSAInstructionFactory getInstructionFactory() { return JS.instructionFactory(); } @@ -905,12 +1022,14 @@ public class JavaScriptLoader extends CAstAbstractModuleLoader { * adds the {@link #bootstrapFileNames bootstrap files} to the list of modules * and then invokes the superclass method */ + @Override public void init(List modules) { List all = new LinkedList(); for (final String fn : bootstrapFileNames) { all.add(new SourceURLModule(getClass().getClassLoader().getResource(fn)) { + @Override public String getName() { return fn; } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/loader/JavaScriptLoaderFactory.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/loader/JavaScriptLoaderFactory.java index 91242a302..bfac347ba 100755 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/loader/JavaScriptLoaderFactory.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/loader/JavaScriptLoaderFactory.java @@ -34,10 +34,12 @@ public class JavaScriptLoaderFactory extends SingleClassLoaderFactory { this.preprocessor = preprocessor; } + @Override protected IClassLoader makeTheLoader(IClassHierarchy cha) { return new JavaScriptLoader( cha, translatorFactory, preprocessor ); } + @Override public ClassLoaderReference getTheReference() { return JavaScriptTypes.jsLoader; } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JSAbstractInstructionVisitor.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JSAbstractInstructionVisitor.java index 2b4c7bc12..6c5a51270 100755 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JSAbstractInstructionVisitor.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JSAbstractInstructionVisitor.java @@ -17,30 +17,37 @@ public class JSAbstractInstructionVisitor implements JSInstructionVisitor { + @Override public void visitJavaScriptInvoke(JavaScriptInvoke instruction) { } + @Override public void visitJavaScriptPropertyRead(JavaScriptPropertyRead instruction) { } + @Override public void visitJavaScriptPropertyWrite(JavaScriptPropertyWrite instruction) { } + @Override public void visitTypeOf(JavaScriptTypeOfInstruction instruction) { } + @Override public void visitJavaScriptInstanceOf(JavaScriptInstanceOf instruction) { } + @Override public void visitCheckRef(JavaScriptCheckReference instruction) { } + @Override public void visitWithRegion(JavaScriptWithRegion instruction) { } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptCheckReference.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptCheckReference.java index e230a4f11..c0636941a 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptCheckReference.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptCheckReference.java @@ -60,14 +60,17 @@ public class JavaScriptCheckReference extends SSAInstruction { ((JSInstructionVisitor)v).visitCheckRef(this); } + @Override public boolean isPEI() { return true; } + @Override public int getNumberOfUses() { return 1; } + @Override public int getUse(int i) { assert i == 0; return ref; diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptInstanceOf.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptInstanceOf.java index 55c340b55..9f46f455b 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptInstanceOf.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptInstanceOf.java @@ -45,6 +45,7 @@ public class JavaScriptInstanceOf extends SSAInstruction { return Collections.singleton(JavaScriptTypes.TypeError); } + @Override public boolean isPEI() { return true; } @@ -69,19 +70,23 @@ public class JavaScriptInstanceOf extends SSAInstruction { ((JSInstructionVisitor)v).visitJavaScriptInstanceOf(this); } + @Override public int getNumberOfDefs() { return 1; } + @Override public int getDef(int i) { assert i == 0; return result; } + @Override public int getNumberOfUses() { return 2; } + @Override public int getUse(int i) { switch (i) { case 0: return objVal; diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptInvoke.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptInvoke.java index 5a63aa0a1..b0f308627 100755 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptInvoke.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptInvoke.java @@ -50,6 +50,7 @@ public class JavaScriptInvoke extends AbstractLexicalInvoke { this(function, null, params, exception, site); } + @Override public SSAInstruction copyForSSA(SSAInstructionFactory insts, int[] defs, int[] uses) { int fn = function; int newParams[] = params; @@ -96,6 +97,7 @@ public class JavaScriptInvoke extends AbstractLexicalInvoke { return ((JSInstructionFactory)insts).Invoke(fn, newLvals, newParams, newExp, site, reads, writes); } + @Override public String toString(SymbolTable symbolTable) { StringBuffer s = new StringBuffer(); if (getNumberOfReturnValues() > 0) { @@ -152,11 +154,13 @@ public class JavaScriptInvoke extends AbstractLexicalInvoke { /** * @see com.ibm.domo.ssa.Instruction#visit(Visitor) */ + @Override public void visit(IVisitor v) { assert v instanceof JSInstructionVisitor; ((JSInstructionVisitor) v).visitJavaScriptInvoke(this); } + @Override public int getNumberOfParameters() { if (params == null) { return 1; @@ -168,6 +172,7 @@ public class JavaScriptInvoke extends AbstractLexicalInvoke { /** * @see com.ibm.domo.ssa.Instruction#getUse(int) */ + @Override public int getUse(int j) { if (j == 0) return function; @@ -186,10 +191,12 @@ public class JavaScriptInvoke extends AbstractLexicalInvoke { * (non-Javadoc) * @see com.ibm.domo.ssa.Instruction#getExceptionTypes() */ + @Override public Collection getExceptionTypes() { return Util.typeErrorExceptions(); } + @Override public int hashCode() { return site.hashCode() * function * 7529; } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptPropertyRead.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptPropertyRead.java index 0a37fac4e..159d44e66 100755 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptPropertyRead.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptPropertyRead.java @@ -22,6 +22,7 @@ public class JavaScriptPropertyRead extends AbstractReflectiveGet { super(result, objectRef, memberRef); } + @Override public SSAInstruction copyForSSA(SSAInstructionFactory insts, int[] defs, int[] uses) { return ((JSInstructionFactory)insts).PropertyRead( @@ -33,6 +34,7 @@ public class JavaScriptPropertyRead extends AbstractReflectiveGet { /* (non-Javadoc) * @see com.ibm.domo.ssa.Instruction#isPEI() */ + @Override public boolean isPEI() { return true; } @@ -40,6 +42,7 @@ public class JavaScriptPropertyRead extends AbstractReflectiveGet { /* (non-Javadoc) * @see com.ibm.domo.ssa.Instruction#getExceptionTypes() */ + @Override public Collection getExceptionTypes() { return Util.typeErrorExceptions(); } @@ -48,6 +51,7 @@ public class JavaScriptPropertyRead extends AbstractReflectiveGet { /* (non-Javadoc) * @see com.ibm.domo.ssa.SSAInstruction#visit(com.ibm.domo.ssa.SSAInstruction.Visitor) */ + @Override public void visit(IVisitor v) { assert v instanceof JSInstructionVisitor; ((JSInstructionVisitor)v).visitJavaScriptPropertyRead(this); diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptPropertyWrite.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptPropertyWrite.java index 86323b260..8b89d9f91 100755 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptPropertyWrite.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptPropertyWrite.java @@ -24,11 +24,13 @@ public class JavaScriptPropertyWrite extends AbstractReflectivePut { super(objectRef, memberRef, value); } + @Override public SSAInstruction copyForSSA(SSAInstructionFactory insts, int[] defs, int[] uses) { return ((JSInstructionFactory)insts).PropertyWrite(uses == null ? getObjectRef() : uses[0], uses == null ? getMemberRef() : uses[1], uses == null ? getValue() : uses[2]); } + @Override public String toString(SymbolTable symbolTable) { return super.toString(symbolTable) + " = " + getValueString(symbolTable, getValue()); } @@ -36,6 +38,7 @@ public class JavaScriptPropertyWrite extends AbstractReflectivePut { /** * @see com.ibm.domo.ssa.Instruction#visit(Visitor) */ + @Override public void visit(IVisitor v) { assert v instanceof JSInstructionVisitor; ((JSInstructionVisitor) v).visitJavaScriptPropertyWrite(this); @@ -45,6 +48,7 @@ public class JavaScriptPropertyWrite extends AbstractReflectivePut { * (non-Javadoc) * @see com.ibm.domo.ssa.Instruction#isPEI() */ + @Override public boolean isPEI() { return true; } @@ -53,6 +57,7 @@ public class JavaScriptPropertyWrite extends AbstractReflectivePut { * (non-Javadoc) * @see com.ibm.domo.ssa.Instruction#getExceptionTypes() */ + @Override public Collection getExceptionTypes() { return Util.typeErrorExceptions(); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptTypeOfInstruction.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptTypeOfInstruction.java index 5855a3acf..12425daf5 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptTypeOfInstruction.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptTypeOfInstruction.java @@ -24,18 +24,22 @@ public class JavaScriptTypeOfInstruction extends SSAAbstractUnaryInstruction { super(lval, object); } + @Override public SSAInstruction copyForSSA(SSAInstructionFactory insts, int[] defs, int[] uses) { return ((JSInstructionFactory)insts).TypeOfInstruction((defs != null ? defs[0] : getDef(0)), (uses != null ? uses[0] : getUse(0))); } + @Override public String toString(SymbolTable symbolTable) { return getValueString(symbolTable, getDef(0)) + " = typeof(" + getValueString(symbolTable, getUse(0)) + ")"; } + @Override public void visit(IVisitor v) { ((JSInstructionVisitor) v).visitTypeOf(this); } + @Override public Collection getExceptionTypes() { return Util.noExceptions(); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptWithRegion.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptWithRegion.java index d13e18598..51f9dba9f 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptWithRegion.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptWithRegion.java @@ -56,10 +56,12 @@ public class JavaScriptWithRegion extends SSAInstruction { ((JSInstructionVisitor)v).visitWithRegion(this); } + @Override public int getNumberOfUses() { return 1; } + @Override public int getUse(int i) { assert i == 0; return expr; diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/JSAstTranslator.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/JSAstTranslator.java index d22747ffe..34c0df3fd 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/JSAstTranslator.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/JSAstTranslator.java @@ -53,22 +53,27 @@ public class JSAstTranslator extends AstTranslator { return JavaScriptLoader.bootstrapFileNames.contains( context.getModule().getName() ); } + @Override protected boolean useDefaultInitValues() { return false; } + @Override protected boolean hasImplicitGlobals() { return true; } + @Override protected boolean treatGlobalsAsLexicallyScoped() { return false; } + @Override protected TypeReference defaultCatchType() { return JavaScriptTypes.Root; } + @Override protected TypeReference makeType(CAstType type) { Assertions.UNREACHABLE("JavaScript does not use CAstType"); return null; @@ -90,6 +95,7 @@ public class JSAstTranslator extends AstTranslator { context.cfg().newBlock(true); } + @Override protected int doLexicallyScopedRead(CAstNode n, WalkContext context, String name) { int readVn = super.doLexicallyScopedRead(n, context, name); // should get an exception if name is undefined @@ -97,6 +103,7 @@ public class JSAstTranslator extends AstTranslator { return readVn; } + @Override protected int doGlobalRead(CAstNode n, WalkContext context, String name) { int readVn = super.doGlobalRead(n, context, name); // add a check if name is undefined, unless we're reading the value 'undefined' @@ -106,15 +113,18 @@ public class JSAstTranslator extends AstTranslator { return readVn; } + @Override protected boolean defineType(CAstEntity type, WalkContext wc) { Assertions.UNREACHABLE("JavaScript doesn't have types. I suggest you look elsewhere for your amusement."); return false; } + @Override protected void defineField(CAstEntity topEntity, WalkContext wc, CAstEntity n) { Assertions.UNREACHABLE("JavaScript doesn't have fields"); } + @Override protected String composeEntityName(WalkContext parent, CAstEntity f) { if (f.getKind() == CAstEntity.SCRIPT_ENTITY) return f.getName(); @@ -122,6 +132,7 @@ public class JSAstTranslator extends AstTranslator { return parent.getName() + "/" + f.getName(); } + @Override protected void declareFunction(CAstEntity N, WalkContext context) { String fnName = composeEntityName(context, N); if (N.getKind() == CAstEntity.SCRIPT_ENTITY) { @@ -133,6 +144,7 @@ public class JSAstTranslator extends AstTranslator { } } + @Override protected void defineFunction(CAstEntity N, WalkContext definingContext, AbstractCFG cfg, SymbolTable symtab, boolean hasCatchBlock, Map caughtTypes, boolean hasMonitorOp, AstLexicalInformation LI, DebuggingInformation debugInfo) { @@ -147,10 +159,12 @@ public class JSAstTranslator extends AstTranslator { debugInfo); } + @Override protected void doThrow(WalkContext context, int exception) { context.cfg().addInstruction(insts.ThrowInstruction(exception)); } + @Override protected void doCall(WalkContext context, CAstNode call, int result, int exception, CAstNode name, int receiver, int[] arguments) { MethodReference ref = name.getValue().equals("ctor") ? JavaScriptMethods.ctorReference @@ -173,6 +187,7 @@ public class JSAstTranslator extends AstTranslator { context.cfg().addPreEdgeToExit(call, true); } + @Override protected void doNewObject(WalkContext context, CAstNode newNode, int result, Object type, int[] arguments) { assert arguments == null; TypeReference typeRef = TypeReference.findOrCreate(JavaScriptTypes.jsLoader, TypeName.string2TypeName("L" + type)); @@ -181,6 +196,7 @@ public class JSAstTranslator extends AstTranslator { insts.NewInstruction(result, NewSiteReference.make(context.cfg().getCurrentInstruction(), typeRef))); } + @Override protected void doMaterializeFunction(CAstNode n, WalkContext context, int result, int exception, CAstEntity fn) { int nm = context.currentScope().getConstantValue("L" + composeEntityName(context, fn)); // "Function" is the name we use to model the constructor of function values @@ -190,14 +206,17 @@ public class JSAstTranslator extends AstTranslator { JavaScriptMethods.ctorReference, context.cfg().getCurrentInstruction()))); } + @Override public void doArrayRead(WalkContext context, int result, int arrayValue, CAstNode arrayRef, int[] dimValues) { Assertions.UNREACHABLE("JSAstTranslator.doArrayRead() called!"); } + @Override public void doArrayWrite(WalkContext context, int arrayValue, CAstNode arrayRef, int[] dimValues, int rval) { Assertions.UNREACHABLE("JSAstTranslator.doArrayWrite() called!"); } + @Override protected void doFieldRead(WalkContext context, int result, int receiver, CAstNode elt, CAstNode readNode) { this.visit(elt, context, this); int x = context.currentScope().allocateTempValue(); @@ -228,6 +247,7 @@ public class JSAstTranslator extends AstTranslator { } } + @Override protected void doFieldWrite(WalkContext context, int receiver, CAstNode elt, CAstNode parent, int rval) { this.visit(elt, context, this); if (elt.getKind() == CAstNode.CONSTANT && elt.getValue() instanceof String) { @@ -262,6 +282,7 @@ public class JSAstTranslator extends AstTranslator { context.cfg().addInstruction(((JSInstructionFactory) insts).PutInstruction(resultVal, rval, "class")); } + @Override protected void doPrimitive(int resultVal, WalkContext context, CAstNode primitiveCall) { try { String name = (String) primitiveCall.getChild(0).getValue(); @@ -327,6 +348,7 @@ public class JSAstTranslator extends AstTranslator { } } + @Override protected void doIsFieldDefined(WalkContext context, int result, int ref, CAstNode f) { if (f.getKind() == CAstNode.CONSTANT && f.getValue() instanceof String) { String field = (String) f.getValue(); @@ -342,6 +364,7 @@ public class JSAstTranslator extends AstTranslator { } } + @Override protected boolean visitInstanceOf(CAstNode n, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; int result = context.currentScope().allocateTempValue(); @@ -349,6 +372,7 @@ public class JSAstTranslator extends AstTranslator { return false; } + @Override protected void leaveInstanceOf(CAstNode n, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; int result = context.getValue(n); @@ -362,6 +386,7 @@ public class JSAstTranslator extends AstTranslator { context.cfg().addInstruction(new JavaScriptInstanceOf(result, value, type)); } + @Override protected void doPrologue(WalkContext context) { super.doPrologue(context); @@ -372,6 +397,7 @@ public class JSAstTranslator extends AstTranslator { //context.cfg().addInstruction(((JSInstructionFactory) insts).PutInstruction(1, tempVal, "arguments")); } + @Override protected boolean doVisit(CAstNode n, WalkContext cntxt, CAstVisitor visitor) { WalkContext context = (WalkContext) cntxt; switch (n.getKind()) { diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/JavaScriptLoopUnwindingTranslatorFactory.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/JavaScriptLoopUnwindingTranslatorFactory.java index 83c05a515..64db4fdc0 100755 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/JavaScriptLoopUnwindingTranslatorFactory.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/JavaScriptLoopUnwindingTranslatorFactory.java @@ -35,6 +35,7 @@ public abstract class JavaScriptLoopUnwindingTranslatorFactory protected abstract TranslatorToCAst translateInternal(CAst Ast, SourceModule M, String N); + @Override public TranslatorToCAst make(CAst ast, final SourceModule M) { String N; if (M instanceof SourceFileModule) { @@ -45,7 +46,8 @@ public abstract class JavaScriptLoopUnwindingTranslatorFactory TranslatorToCAst xlator = translateInternal(ast, M, N); xlator.addRewriter(new CAstRewriterFactory,AstLoopUnwinder.UnwindKey>() { - public CAstRewriter, UnwindKey> createCAstRewriter(CAst ast) { + @Override + public CAstRewriter, UnwindKey> createCAstRewriter(CAst ast) { return new AstLoopUnwinder(ast, true, unwindFactor); } }, false); diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/JavaScriptTranslatorToCAst.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/JavaScriptTranslatorToCAst.java index 51c6f2204..be32d130c 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/JavaScriptTranslatorToCAst.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/JavaScriptTranslatorToCAst.java @@ -55,22 +55,27 @@ public interface JavaScriptTranslatorToCAst extends TranslatorToCAst { public static class RootContext, T> extends TranslatorToCAst.RootContext implements WalkContext { + @Override public String script() { return null; } + @Override public T top() { Assertions.UNREACHABLE(); return null; } + @Override public void addNameDecl(CAstNode v) { Assertions.UNREACHABLE(); } + @Override public Collection getNameDecls() { Assertions.UNREACHABLE(); return null; } + @Override public CAstNode getCatchTarget() { Assertions.UNREACHABLE(); return null; @@ -99,22 +104,27 @@ public interface JavaScriptTranslatorToCAst extends TranslatorToCAst { super(parent); } + @Override public String script() { return parent.script(); } + @Override public T top() { return parent.top(); } + @Override public void addNameDecl(CAstNode n) { parent.addNameDecl(n); } + @Override public Collection getNameDecls() { return parent.getNameDecls(); } + @Override public CAstNode getCatchTarget() { return parent.getCatchTarget(); } @@ -188,6 +198,7 @@ public interface JavaScriptTranslatorToCAst extends TranslatorToCAst { this.script = script; } + @Override public String script() { return script; } } @@ -199,6 +210,7 @@ public interface JavaScriptTranslatorToCAst extends TranslatorToCAst { this.catchNode = catchNode; } + @Override public CAstNode getCatchTarget() { return catchNode; } } @@ -265,6 +277,7 @@ public interface JavaScriptTranslatorToCAst extends TranslatorToCAst { this.operationIndex = operationIndex; } + @Override public int setOperation(T node) { if (baseFor.contains( node )) { foundBase = true; @@ -274,10 +287,12 @@ public interface JavaScriptTranslatorToCAst extends TranslatorToCAst { } } + @Override public boolean foundMemberOperation(T node) { return foundBase; } + @Override public void copyOperation(T from, T to) { if (baseFor.contains(from)) baseFor.add(to); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/PropertyReadExpander.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/PropertyReadExpander.java index 0dd8d9800..62148d431 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/PropertyReadExpander.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/PropertyReadExpander.java @@ -31,8 +31,10 @@ public class PropertyReadExpander extends CAstRewriter { EVERYWHERE, EXTRA { + @Override public ExpanderKey parent() { return EVERYWHERE; } }; + @Override public ExpanderKey parent() { return null; } } @@ -42,6 +44,7 @@ public class PropertyReadExpander extends CAstRewriter { + @Override public ExpanderKey key() { return ExpanderKey.EVERYWHERE; } @@ -72,10 +75,12 @@ public class PropertyReadExpander extends CAstRewriter, CAstNode> nodeMap) { int kind = root.getKind(); diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/RangePosition.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/RangePosition.java index ce6d25412..8a11e6eec 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/RangePosition.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/RangePosition.java @@ -32,6 +32,7 @@ public class RangePosition extends AbstractSourcePosition implements Position { this.endOffset = endOffset; } + @Override public int compareTo(Object o) { Position other = (Position) o; if (startOffset != other.getFirstOffset()) { @@ -41,34 +42,42 @@ public class RangePosition extends AbstractSourcePosition implements Position { } } + @Override public int getFirstLine() { return line; } + @Override public int getLastLine() { return -1; } + @Override public int getFirstCol() { return -1; } + @Override public int getLastCol() { return -1; } + @Override public int getFirstOffset() { return startOffset; } + @Override public int getLastOffset() { return endOffset; } + @Override public URL getURL() { return url; } + @Override public InputStream getInputStream() throws IOException { return url.openStream(); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/vis/JsPaPanel.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/vis/JsPaPanel.java index 33d9e2985..3cd7aeba6 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/vis/JsPaPanel.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/vis/JsPaPanel.java @@ -63,7 +63,8 @@ public class JsPaPanel extends PaPanel { } } - protected List getPointerKeysUnderInstanceKey(InstanceKey ik) { + @Override + protected List getPointerKeysUnderInstanceKey(InstanceKey ik) { List ret = new ArrayList(); ret.addAll(super.getPointerKeysUnderInstanceKey(ik)); int ikIndex = pa.getInstanceKeyMapping().getMappedIndex(ik); diff --git a/com.ibm.wala.cast.test/harness-src/com/ibm/wala/cast/test/TestCAstPattern.java b/com.ibm.wala.cast.test/harness-src/com/ibm/wala/cast/test/TestCAstPattern.java index bae4db4ca..e8d3b3439 100644 --- a/com.ibm.wala.cast.test/harness-src/com/ibm/wala/cast/test/TestCAstPattern.java +++ b/com.ibm.wala.cast.test/harness-src/com/ibm/wala/cast/test/TestCAstPattern.java @@ -36,6 +36,7 @@ public class TestCAstPattern extends WalaTestCase { private static class TestingCAstImpl extends CAstImpl { private final Map testNameMap = new HashMap(); + @Override @SuppressWarnings("unchecked") public CAstNode makeNode(int kind, CAstNode children[]) { if (kind == NAME_ASSERTION_SINGLE || kind == NAME_ASSERTION_MULTI) { diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/analysis/typeInference/AstTypeInference.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/analysis/typeInference/AstTypeInference.java index 175a0f766..8f0917ae9 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/analysis/typeInference/AstTypeInference.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/analysis/typeInference/AstTypeInference.java @@ -31,36 +31,45 @@ public abstract class AstTypeInference extends TypeInference { private final TypeAbstraction booleanType; protected class AstTypeOperatorFactory extends TypeOperatorFactory implements AstInstructionVisitor { + @Override public void visitAstLexicalRead(AstLexicalRead inst) { result = new DeclaredTypeOperator(new ConeType(cha.getRootClass())); } + @Override public void visitAstLexicalWrite(AstLexicalWrite inst) { } + @Override public void visitAstGlobalRead(AstGlobalRead instruction) { result = new DeclaredTypeOperator(new ConeType(cha.getRootClass())); } + @Override public void visitAstGlobalWrite(AstGlobalWrite instruction) { } + @Override public void visitAssert(AstAssertInstruction instruction) { } + @Override public void visitEachElementGet(EachElementGetInstruction inst) { result = new DeclaredTypeOperator(new ConeType(cha.getRootClass())); } + @Override public void visitEachElementHasNext(EachElementHasNextInstruction inst) { } + @Override public void visitIsDefined(AstIsDefinedInstruction inst) { if (doPrimitives) { result = new DeclaredTypeOperator(booleanType); } } + @Override public void visitEcho(AstEchoInstruction inst) { } @@ -71,6 +80,7 @@ public abstract class AstTypeInference extends TypeInference { this.booleanType = booleanType; } + @Override protected void initialize() { init(ir, new TypeVarFactory(), new AstTypeOperatorFactory()); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ArgumentInstanceContext.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ArgumentInstanceContext.java index 765616b4c..6aaf8d47c 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ArgumentInstanceContext.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ArgumentInstanceContext.java @@ -30,6 +30,7 @@ public class ArgumentInstanceContext implements Context { this.instanceKey = instanceKey; } + @Override public ContextItem get(ContextKey name) { /*if(name == ContextKey.RECEIVER && index == 1) return instanceKey;*/ diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstCallGraph.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstCallGraph.java index 72f0a44dc..21a9ca451 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstCallGraph.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstCallGraph.java @@ -54,6 +54,7 @@ public class AstCallGraph extends ExplicitCallGraph { super(rootMethod, cha, options, cache); } + @Override public InducedCFG makeControlFlowGraph(SSAInstruction[] statements) { return new AstInducedCFG(statements, this, Everywhere.EVERYWHERE); } @@ -147,6 +148,7 @@ public class AstCallGraph extends ExplicitCallGraph { targets.remove(cs.getProgramCounter()); } + @Override public boolean addTarget(CallSiteReference site, CGNode node) { if (super.addTarget(site, node)) { if (((AstCGNode) node).callbacks != null) { @@ -160,10 +162,12 @@ public class AstCallGraph extends ExplicitCallGraph { } } + @Override protected ExplicitNode makeNode(IMethod method, Context context) { return new AstCGNode(method, context); } + @Override protected CGNode makeFakeRootNode() throws CancelException { return findOrCreateNode(new AstFakeRoot(FakeRootMethod.rootMethod, cha, options, getAnalysisCache()), Everywhere.EVERYWHERE); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstContextInsensitiveSSAContextInterpreter.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstContextInsensitiveSSAContextInterpreter.java index 8e9c003ac..60a52bb7a 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstContextInsensitiveSSAContextInterpreter.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstContextInsensitiveSSAContextInterpreter.java @@ -41,6 +41,7 @@ public class AstContextInsensitiveSSAContextInterpreter extends ContextInsensiti return method instanceof AstMethod; } + @Override public Iterator iterateNewSites(CGNode N) { IR ir = getIR(N); if (ir == null) { @@ -50,6 +51,7 @@ public class AstContextInsensitiveSSAContextInterpreter extends ContextInsensiti } } + @Override public Iterator iterateCallSites(CGNode N) { IR ir = getIR(N); if (ir == null) { diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstGlobalPointerKey.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstGlobalPointerKey.java index 51fbdff25..415ef3cce 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstGlobalPointerKey.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstGlobalPointerKey.java @@ -22,15 +22,18 @@ public class AstGlobalPointerKey extends AbstractPointerKey { this.globalName = globalName; } + @Override public boolean equals(Object x) { return (x instanceof AstGlobalPointerKey) && ((AstGlobalPointerKey)x).globalName.equals(globalName); } + @Override public int hashCode() { return globalName.hashCode(); } + @Override public String toString() { return "[global: " + globalName + "]"; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstSSAPropagationCallGraphBuilder.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstSSAPropagationCallGraphBuilder.java index 4b92d66b5..153d8bcf9 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstSSAPropagationCallGraphBuilder.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstSSAPropagationCallGraphBuilder.java @@ -141,6 +141,7 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa super(builder, cg, pointsToMap, instanceKeys, pointerKeys, iKeyFactory); } + @Override protected ImplicitPointsToSetVisitor makeImplicitPointsToVisitor(LocalPointerKey lpk) { return new AstImplicitPointsToSetVisitor(this, lpk); } @@ -150,38 +151,47 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa super(analysis, lpk); } + @Override public void visitAstLexicalRead(AstLexicalRead instruction) { } + @Override public void visitAstLexicalWrite(AstLexicalWrite instruction) { } + @Override public void visitAstGlobalRead(AstGlobalRead instruction) { pointsToSet = analysis.computeImplicitPointsToSetAtGet(node, instruction.getDeclaredField(), -1, true); } + @Override public void visitAstGlobalWrite(AstGlobalWrite instruction) { } + @Override public void visitAssert(AstAssertInstruction instruction) { } + @Override public void visitEachElementGet(EachElementGetInstruction inst) { } + @Override public void visitEachElementHasNext(EachElementHasNextInstruction inst) { } + @Override public void visitIsDefined(AstIsDefinedInstruction inst) { } + @Override public void visitEcho(AstEchoInstruction inst) { } @@ -194,6 +204,7 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa // // ///////////////////////////////////////////////////////////////////////// + @Override protected ExplicitCallGraph createEmptyCallGraph(IClassHierarchy cha, AnalysisOptions options) { return new AstCallGraph(cha, options, getAnalysisCache()); } @@ -204,43 +215,53 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa super(vn); } + @Override public void visitAstLexicalRead(AstLexicalRead instruction) { bingo = true; } + @Override public void visitAstLexicalWrite(AstLexicalWrite instruction) { bingo = true; } + @Override public void visitAstGlobalRead(AstGlobalRead instruction) { bingo = true; } + @Override public void visitAstGlobalWrite(AstGlobalWrite instruction) { bingo = true; } + @Override public void visitAssert(AstAssertInstruction instruction) { bingo = true; } + @Override public void visitEachElementGet(EachElementGetInstruction inst) { bingo = true; } + @Override public void visitEachElementHasNext(EachElementHasNextInstruction inst) { } + @Override public void visitIsDefined(AstIsDefinedInstruction inst) { } + @Override public void visitEcho(AstEchoInstruction inst) { } } + @Override protected InterestingVisitor makeInterestingVisitor(CGNode node, int vn) { return new AstInterestingVisitor(vn); } @@ -274,6 +295,7 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa super(builder, node); } + @Override protected AstSSAPropagationCallGraphBuilder getBuilder() { return (AstSSAPropagationCallGraphBuilder) builder; } @@ -301,8 +323,10 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa + @Override public void visitAstLexicalRead(AstLexicalRead instruction) { visitLexical(instruction, new LexicalOperator((AstCGNode) node, instruction.getAccesses(), true) { + @Override protected void action(PointerKey lexicalKey, int vn) { PointerKey lval = getPointerKeyForLocal(vn); if (lexicalKey instanceof LocalPointerKey) { @@ -328,8 +352,10 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa }); } + @Override public void visitAstLexicalWrite(AstLexicalWrite instruction) { visitLexical(instruction, new LexicalOperator((AstCGNode) node, instruction.getAccesses(), false) { + @Override protected void action(PointerKey lexicalKey, int vn) { PointerKey rval = getPointerKeyForLocal(vn); if (contentsAreInvariant(symbolTable, du, vn)) { @@ -346,14 +372,17 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa }); } + @Override public void visitAstGlobalRead(AstGlobalRead instruction) { visitGetInternal(instruction.getDef(), -1, true, instruction.getDeclaredField()); } + @Override public void visitAstGlobalWrite(AstGlobalWrite instruction) { visitPutInternal(instruction.getVal(), -1, true, instruction.getDeclaredField()); } + @Override public void visitPut(SSAPutInstruction inst) { super.visitPut(inst); @@ -394,10 +423,12 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa } else { final String hack = fieldName; system.newSideEffect(new UnaryOperator() { + @Override public byte evaluate(PointsToSetVariable lhs, PointsToSetVariable rhs) { final IntSetVariable objects = (IntSetVariable) rhs; if (objects.getValue() != null) { objects.getValue().foreach(new IntSetAction() { + @Override public void act(int optr) { InstanceKey object = system.getInstanceKey(optr); if (!getBuilder().isUncataloguedField(object.getConcreteType(), hack)) { @@ -412,14 +443,17 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa return NOT_CHANGED; } + @Override public int hashCode() { return System.identityHashCode(this); } + @Override public boolean equals(Object o) { return o == this; } + @Override public String toString() { return "field name record: " + objKey; } @@ -427,14 +461,17 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa } } + @Override public void visitAssert(AstAssertInstruction instruction) { } + @Override public void visitEachElementHasNext(EachElementHasNextInstruction inst) { } + @Override public void visitEachElementGet(EachElementGetInstruction inst) { int lval = inst.getDef(0); final PointerKey lk = getPointerKeyForLocal(lval); @@ -452,10 +489,12 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa else { system.newSideEffect(new UnaryOperator() { + @Override public byte evaluate(PointsToSetVariable lhs, PointsToSetVariable rhs) { final IntSetVariable objects = (IntSetVariable) rhs; if (objects.getValue() != null) { objects.getValue().foreach(new IntSetAction() { + @Override public void act(int optr) { InstanceKey object = system.getInstanceKey(optr); PointerKey objCatalog = getPointerKeyForObjectCatalog(object); @@ -468,14 +507,17 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa return NOT_CHANGED; } + @Override public int hashCode() { return System.identityHashCode(this); } + @Override public boolean equals(Object o) { return o == this; } + @Override public String toString() { return "get catalog op" + rk; } @@ -483,14 +525,17 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa } } + @Override public void visitIsDefined(AstIsDefinedInstruction inst) { } + @Override public void visitEcho(AstEchoInstruction inst) { } + @Override protected void visitInvokeInternal(final SSAAbstractInvokeInstruction instruction, InvariantComputer invs) { super.visitInvokeInternal(instruction, invs); if (instruction instanceof AbstractLexicalInvoke) { @@ -581,6 +626,7 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa } } + @Override public byte evaluate(PointsToSetVariable lhs, PointsToSetVariable rhs) { doLexicalPointerKeys(true); return NOT_CHANGED; @@ -588,10 +634,12 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa abstract protected void action(PointerKey lexicalKey, int vn); + @Override public String toString() { return "lexical op"; } + @Override public boolean equals(Object o) { if (!(o instanceof LexicalOperator)) { return false; @@ -625,6 +673,7 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa } } + @Override public int hashCode() { return node.hashCode() * accesses[0].hashCode() * accesses.length; } @@ -658,6 +707,7 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa PointsToSetVariable FV = system.findOrCreatePointsToSet(F); if (FV.getValue() != null) { FV.getValue().foreach(new IntSetAction() { + @Override public void act(int ptr) { InstanceKey iKey = system.getInstanceKey(ptr); if (iKey instanceof ScopeMappingInstanceKey) { @@ -745,6 +795,7 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa return definingNode; } + @Override public boolean equals(Object x) { return (x instanceof UpwardFunargPointerKey) && super.equals(x) @@ -752,10 +803,12 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa .equals(((UpwardFunargPointerKey) x).getDefiningNode())); } + @Override public int hashCode() { return super.hashCode() * ((definingNode == null) ? 17 : definingNode.hashCode()); } + @Override public String toString() { return "[upward:" + getName() + ":" + definingNode + "]"; } @@ -894,11 +947,13 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa private final MutableIntSet doneReceiver = IntSetUtil.make(); private final MutableIntSet doneField = IntSetUtil.make(); + @Override public byte evaluate(PointsToSetVariable lhs, final PointsToSetVariable[] rhs) { final IntSetVariable receivers = (IntSetVariable) rhs[0]; final IntSetVariable fields = (IntSetVariable) rhs[1]; if (receivers.getValue() != null && fields.getValue() != null) { receivers.getValue().foreach(new IntSetAction() { + @Override public void act(final int rptr) { final InstanceKey receiver = system.getInstanceKey(rptr); @@ -910,6 +965,7 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa } fields.getValue().foreach(new IntSetAction() { + @Override public void act(int fptr) { if (!doneField.contains(fptr) || !doneReceiver.contains(rptr)) { InstanceKey field = system.getInstanceKey(fptr); @@ -932,14 +988,17 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa return NOT_CHANGED; } + @Override public String toString() { return "field op"; } + @Override public boolean equals(Object o) { return o == this; } + @Override public int hashCode() { return System.identityHashCode(this); } @@ -949,10 +1008,12 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa protected void newFieldOperationOnlyFieldConstant(final boolean isLoadOperation, final ReflectedFieldAction action, final PointerKey objKey, final InstanceKey[] fieldsKeys) { system.newSideEffect(new UnaryOperator() { + @Override public byte evaluate(PointsToSetVariable lhs, PointsToSetVariable rhs) { final IntSetVariable objects = (IntSetVariable) rhs; if (objects.getValue() != null) { objects.getValue().foreach(new IntSetAction() { + @Override public void act(int optr) { InstanceKey object = system.getInstanceKey(optr); PointerKey objCatalog = getPointerKeyForObjectCatalog(object); @@ -982,14 +1043,17 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa return NOT_CHANGED; } + @Override public int hashCode() { return System.identityHashCode(this); } + @Override public boolean equals(Object o) { return o == this; } + @Override public String toString() { return "field op" + objKey; } @@ -1008,10 +1072,12 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa } system.newSideEffect(new UnaryOperator() { + @Override public byte evaluate(PointsToSetVariable lhs, PointsToSetVariable rhs) { final IntSetVariable fields = (IntSetVariable) rhs; if (fields.getValue() != null) { fields.getValue().foreach(new IntSetAction() { + @Override public void act(int fptr) { InstanceKey field = system.getInstanceKey(fptr); for (int o = 0; o < objKeys.length; o++) { @@ -1029,14 +1095,17 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa return NOT_CHANGED; } + @Override public int hashCode() { return System.identityHashCode(this); } + @Override public boolean equals(Object o) { return o == this; } + @Override public String toString() { return "field op" + fieldKey; } @@ -1090,6 +1159,7 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa this.rhsFixedValues = rhsFixedValues; } + @Override public void dump(AbstractFieldPointerKey fieldKey, boolean constObj, boolean constProp) { System.err.println(("writing fixed rvals to " + fieldKey + " " + constObj + ", " + constProp)); for (int i = 0; i < rhsFixedValues.length; i++) { @@ -1097,6 +1167,7 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa } } + @Override public void action(AbstractFieldPointerKey fieldKey) { if (!representsNullType(fieldKey.getInstanceKey())) { for (int i = 0; i < rhsFixedValues.length; i++) { @@ -1122,10 +1193,12 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa this.rhs = rhs; } + @Override public void dump(AbstractFieldPointerKey fieldKey, boolean constObj, boolean constProp) { System.err.println(("write " + rhs + " to " + fieldKey + " " + constObj + ", " + constProp)); } + @Override public void action(AbstractFieldPointerKey fieldKey) { if (!representsNullType(fieldKey.getInstanceKey())) { system.newConstraint(fieldKey, assignOperator, rhs); @@ -1147,10 +1220,12 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa protected void newFieldRead(CGNode opNode, int objVn, int fieldsVn, final PointerKey lhs) { newFieldOperation(opNode, objVn, fieldsVn, true, new ReflectedFieldAction() { + @Override public void dump(AbstractFieldPointerKey fieldKey, boolean constObj, boolean constProp) { System.err.println(("read " + lhs + " from " + fieldKey + " " + constObj + ", " + constProp)); } + @Override public void action(AbstractFieldPointerKey fieldKey) { if (!representsNullType(fieldKey.getInstanceKey())) { system.newConstraint(lhs, assignOperator, fieldKey); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CAstAnalysisScope.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CAstAnalysisScope.java index b0381ac4d..c27441e1d 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CAstAnalysisScope.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CAstAnalysisScope.java @@ -62,6 +62,7 @@ public class CAstAnalysisScope extends AnalysisScope { * * @return ClassLoaderReference */ + @Override public ClassLoaderReference getPrimordialLoader() { Assertions.UNREACHABLE(); return null; @@ -72,6 +73,7 @@ public class CAstAnalysisScope extends AnalysisScope { * * @return ClassLoaderReference */ + @Override public ClassLoaderReference getExtensionLoader() { Assertions.UNREACHABLE(); return null; @@ -82,6 +84,7 @@ public class CAstAnalysisScope extends AnalysisScope { * * @return ClassLoaderReference */ + @Override public ClassLoaderReference getApplicationLoader() { Assertions.UNREACHABLE(); return null; @@ -90,6 +93,7 @@ public class CAstAnalysisScope extends AnalysisScope { /** * @return Returns the arrayClassLoader. */ + @Override public ArrayClassLoader getArrayClassLoader() { Assertions.UNREACHABLE(); return null; @@ -100,6 +104,7 @@ public class CAstAnalysisScope extends AnalysisScope { * * @return ClassLoaderReference */ + @Override public ClassLoaderReference getSyntheticLoader() { Assertions.UNREACHABLE(); return null; @@ -111,6 +116,7 @@ public class CAstAnalysisScope extends AnalysisScope { * @param loader * @param file */ + @Override public void addClassFileToScope(ClassLoaderReference loader, File file) { Assertions.UNREACHABLE(); } @@ -118,6 +124,7 @@ public class CAstAnalysisScope extends AnalysisScope { /** * @return the ClassLoaderReference specified by name. */ + @Override public ClassLoaderReference getLoader(Atom name) { assert name.equals(theLoader.getName()); return theLoader; @@ -125,6 +132,7 @@ public class CAstAnalysisScope extends AnalysisScope { /** */ + @Override public Collection getLoaders() { return Collections.singleton(theLoader); } @@ -132,10 +140,12 @@ public class CAstAnalysisScope extends AnalysisScope { /** * @return the number of loaders. */ + @Override public int getNumberOfLoaders() { return 1; } + @Override public String toString() { return super.toString() + "\n" + theLoader + ": " + getModules(theLoader); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CAstCallGraphUtil.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CAstCallGraphUtil.java index ed8402cdb..7dce238a9 100755 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CAstCallGraphUtil.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CAstCallGraphUtil.java @@ -54,7 +54,7 @@ public class CAstCallGraphUtil { assert hackedName.endsWith(scriptName) : scriptName + " does not match file " + script.getFile(); - return new SourceFileModule(scriptFile, scriptName); + return new SourceFileModule(scriptFile, scriptName, null); } public static AnalysisScope makeScope(String[] files, SingleClassLoaderFactory loaders, Language language) throws IOException { diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageCallGraph.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageCallGraph.java index baea5d530..75550b238 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageCallGraph.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageCallGraph.java @@ -107,6 +107,7 @@ public class CrossLanguageCallGraph extends AstCallGraph { return root.addPhi(values); } + @Override public int addGetInstance(FieldReference ref, int object) { TypeReference type = ref.getDeclaringClass(); Atom language = type.getClassLoader().getLanguage(); @@ -114,6 +115,7 @@ public class CrossLanguageCallGraph extends AstCallGraph { return root.addGetInstance(ref, object); } + @Override public int addGetStatic(FieldReference ref) { TypeReference type = ref.getDeclaringClass(); Atom language = type.getClassLoader().getLanguage(); @@ -121,18 +123,21 @@ public class CrossLanguageCallGraph extends AstCallGraph { return root.addGetStatic(ref); } + @Override public int addCheckcast(TypeReference[] type, int rv, boolean isPEI) { Atom language = type[0].getClassLoader().getLanguage(); AbstractRootMethod root = getLanguageRoot(language); return root.addCheckcast(type, rv, isPEI); } + @Override public SSANewInstruction addAllocation(TypeReference type) { Atom language = type.getClassLoader().getLanguage(); AbstractRootMethod root = getLanguageRoot(language); return root.addAllocation(type); } + @Override public SSAInvokeInstruction addInvocation(int[] params, CallSiteReference site) { TypeReference type = site.getDeclaredTarget().getDeclaringClass(); Atom language = type.getClassLoader().getLanguage(); @@ -144,12 +149,14 @@ public class CrossLanguageCallGraph extends AstCallGraph { return super.addInvocation(params, site); } + @Override public AstLexicalRead addGlobalRead(TypeReference type, String name) { Atom language = type.getClassLoader().getLanguage(); AbstractRootMethod root = getLanguageRoot(language); return ((AstFakeRoot) root).addGlobalRead(type, name); } + @Override public SSAAbstractInvokeInstruction addDirectCall(int functionVn, int[] argVns, CallSiteReference callSite) { TypeReference type = callSite.getDeclaredTarget().getDeclaringClass(); Atom language = type.getClassLoader().getLanguage(); @@ -162,6 +169,7 @@ public class CrossLanguageCallGraph extends AstCallGraph { return languageRootNodes.iterator(); } + @Override protected CGNode makeFakeRootNode() throws CancelException { return findOrCreateNode(new CrossLanguageFakeRoot(cha, options, getAnalysisCache()), Everywhere.EVERYWHERE); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageClassTargetSelector.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageClassTargetSelector.java index 53a84a5b2..bc87d4484 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageClassTargetSelector.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageClassTargetSelector.java @@ -46,6 +46,7 @@ public class CrossLanguageClassTargetSelector implements ClassTargetSelector { return (ClassTargetSelector)languageSelectors.get(getLanguage(site)); } + @Override public IClass getAllocatedTarget(CGNode caller, NewSiteReference site) { return getSelector(site).getAllocatedTarget(caller, site); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageContextSelector.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageContextSelector.java index 5f1f470bd..b301c6bb9 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageContextSelector.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageContextSelector.java @@ -53,10 +53,12 @@ public class CrossLanguageContextSelector implements ContextSelector { return (ContextSelector)languageSelectors.get(getLanguage(site)); } + @Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { return getSelector(site).getCalleeTarget(caller, site, callee, receiver); } + @Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { return getSelector(site).getRelevantParameters(caller, site); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageInstanceKeys.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageInstanceKeys.java index e2f60c7dc..80b8fd4a4 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageInstanceKeys.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageInstanceKeys.java @@ -57,23 +57,28 @@ public class CrossLanguageInstanceKeys implements InstanceKeyFactory { } + @Override public InstanceKey getInstanceKeyForAllocation(CGNode node, NewSiteReference allocation) { return getSelector(allocation).getInstanceKeyForAllocation(node, allocation); } + @Override public InstanceKey getInstanceKeyForMultiNewArray(CGNode node, NewSiteReference allocation, int dim) { return getSelector(allocation).getInstanceKeyForMultiNewArray(node, allocation, dim); } + @Override public InstanceKey getInstanceKeyForConstant(TypeReference type, Object S) { return getSelector(type).getInstanceKeyForConstant(type, S); } + @Override public InstanceKey getInstanceKeyForPEI(CGNode node, ProgramCounter instr, TypeReference type) { assert getSelector(type) != null : "no instance keys for " + type; return getSelector(type).getInstanceKeyForPEI(node, instr, type); } + @Override public InstanceKey getInstanceKeyForClassObject(TypeReference type) { return getSelector(type).getInstanceKeyForClassObject(type); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageMethodTargetSelector.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageMethodTargetSelector.java index 948dd1e05..c03f533ec 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageMethodTargetSelector.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageMethodTargetSelector.java @@ -57,6 +57,7 @@ public class CrossLanguageMethodTargetSelector return (MethodTargetSelector)languageSelectors.get(getLanguage(site)); } + @Override public IMethod getCalleeTarget(CGNode caller, CallSiteReference site, IClass receiver) { assert getSelector(site) != null: "no selector for " + getLanguage(site) + " method " + site; return getSelector(site).getCalleeTarget(caller, site, receiver); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageSSAPropagationCallGraphBuilder.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageSSAPropagationCallGraphBuilder.java index bdf52fe45..35ad73e05 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageSSAPropagationCallGraphBuilder.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CrossLanguageSSAPropagationCallGraphBuilder.java @@ -54,6 +54,7 @@ public abstract class CrossLanguageSSAPropagationCallGraphBuilder extends AstSSA interesting = makeInterestingVisitorSelector(); } + @Override protected ExplicitCallGraph createEmptyCallGraph(IClassHierarchy cha, AnalysisOptions options) { return new CrossLanguageCallGraph(makeRootNodeSelector(), cha, options, getAnalysisCache()); } @@ -62,16 +63,20 @@ public abstract class CrossLanguageSSAPropagationCallGraphBuilder extends AstSSA return node.getMethod().getReference().getDeclaringClass().getClassLoader().getLanguage(); } + @Override protected InterestingVisitor makeInterestingVisitor(CGNode node, int vn) { return interesting.get(getLanguage(node), new Integer(vn)); } + @Override protected ConstraintVisitor makeVisitor(ExplicitCallGraph.ExplicitNode node) { return visitors.get(getLanguage(node), node); } + @Override protected PropagationSystem makeSystem(AnalysisOptions options) { return new PropagationSystem(callGraph, pointerKeyFactory, instanceKeyFactory) { + @Override public PointerAnalysis makePointerAnalysis(PropagationCallGraphBuilder builder) { assert builder == CrossLanguageSSAPropagationCallGraphBuilder.this; return new CrossLanguagePointerAnalysisImpl(CrossLanguageSSAPropagationCallGraphBuilder.this, cg, pointsToMap, @@ -90,11 +95,13 @@ public abstract class CrossLanguageSSAPropagationCallGraphBuilder extends AstSSA this.implicitVisitors = builder.makeImplicitVisitorSelector(this); } + @Override protected ImplicitPointsToSetVisitor makeImplicitPointsToVisitor(LocalPointerKey lpk) { return implicitVisitors.get(getLanguage(lpk.getNode()), lpk); } } + @Override protected void customInit() { for (Iterator roots = ((CrossLanguageCallGraph) callGraph).getLanguageRoots(); roots.hasNext();) { markDiscovered((CGNode) roots.next()); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/DelegatingAstPointerKeys.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/DelegatingAstPointerKeys.java index a31d5b7c1..c69a3c21e 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/DelegatingAstPointerKeys.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/DelegatingAstPointerKeys.java @@ -34,38 +34,47 @@ public class DelegatingAstPointerKeys implements AstPointerKeyFactory { this.base = base; } + @Override public PointerKey getPointerKeyForLocal(CGNode node, int valueNumber) { return base.getPointerKeyForLocal(node, valueNumber); } + @Override public FilteredPointerKey getFilteredPointerKeyForLocal(CGNode node, int valueNumber, FilteredPointerKey.TypeFilter filter) { return base.getFilteredPointerKeyForLocal(node, valueNumber, filter); } + @Override public PointerKey getPointerKeyForReturnValue(CGNode node) { return base.getPointerKeyForReturnValue(node); } + @Override public PointerKey getPointerKeyForExceptionalReturnValue(CGNode node) { return base.getPointerKeyForExceptionalReturnValue(node); } + @Override public PointerKey getPointerKeyForStaticField(IField f) { return base.getPointerKeyForStaticField(f); } + @Override public PointerKey getPointerKeyForObjectCatalog(InstanceKey I) { return new ObjectPropertyCatalogKey(I); } + @Override public PointerKey getPointerKeyForInstanceField(InstanceKey I, IField f) { return base.getPointerKeyForInstanceField(I, f); } + @Override public PointerKey getPointerKeyForArrayContents(InstanceKey I) { return base.getPointerKeyForArrayContents(I); } + @Override public Iterator getPointerKeysForReflectedFieldWrite(InstanceKey I, InstanceKey F) { List result = new LinkedList(); @@ -106,6 +115,7 @@ public class DelegatingAstPointerKeys implements AstPointerKeyFactory { return null; } + @Override public Iterator getPointerKeysForReflectedFieldRead(InstanceKey I, InstanceKey F) { if (F instanceof ConstantKey) { PointerKey ifk = getInstanceFieldPointerKeyForConstant(I, (ConstantKey) F); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/MiscellaneousHacksContextSelector.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/MiscellaneousHacksContextSelector.java index 9036635de..a21cce624 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/MiscellaneousHacksContextSelector.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/MiscellaneousHacksContextSelector.java @@ -108,6 +108,7 @@ public class MiscellaneousHacksContextSelector implements ContextSelector { System.err.println(("hacking context selector for methods " + methodsToSpecialize)); } + @Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { if (methodsToSpecialize.contains(site.getDeclaredTarget()) || methodsToSpecialize.contains(callee.getReference())) { return specialPolicy.getCalleeTarget(caller, site, callee, receiver); @@ -116,6 +117,7 @@ public class MiscellaneousHacksContextSelector implements ContextSelector { } } + @Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { return specialPolicy.getRelevantParameters(caller, site).union(basePolicy.getRelevantParameters(caller, site)); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ObjectPropertyCatalogKey.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ObjectPropertyCatalogKey.java index 55c55fbaf..b40ecea23 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ObjectPropertyCatalogKey.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ObjectPropertyCatalogKey.java @@ -24,15 +24,18 @@ public class ObjectPropertyCatalogKey extends AbstractPointerKey { this.object = object; } + @Override public boolean equals(Object x) { return (x instanceof ObjectPropertyCatalogKey) && ((ObjectPropertyCatalogKey)x).object.equals(object); } + @Override public int hashCode() { return object.hashCode(); } + @Override public String toString() { return "[" + getName() + "]"; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ReflectedFieldPointerKey.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ReflectedFieldPointerKey.java index bfb1631c8..c7ca06d63 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ReflectedFieldPointerKey.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ReflectedFieldPointerKey.java @@ -22,9 +22,11 @@ public abstract class ReflectedFieldPointerKey extends AbstractFieldPointerKey { public abstract Object getFieldIdentifier(); private static final Object arrayStateKey = new Object() { + @Override public String toString() { return "ArrayStateKey"; } }; + @Override public boolean equals(Object obj) { if (obj == this) { return true; @@ -39,14 +41,17 @@ public abstract class ReflectedFieldPointerKey extends AbstractFieldPointerKey { } } + @Override public int hashCode() { return getFieldIdentifier().hashCode() ^ getInstanceKey().hashCode(); } + @Override public String toString() { return "[" + getInstanceKey() + "; " + getFieldIdentifier() + "]"; } public static ReflectedFieldPointerKey literal(final String lit, InstanceKey instance) { return new ReflectedFieldPointerKey(instance) { + @Override public Object getFieldIdentifier() { return lit; } @@ -55,6 +60,7 @@ public abstract class ReflectedFieldPointerKey extends AbstractFieldPointerKey { public static ReflectedFieldPointerKey mapped(final InstanceKey mapFrom, InstanceKey instance) { return new ReflectedFieldPointerKey(instance) { + @Override public Object getFieldIdentifier() { return mapFrom; } @@ -63,6 +69,7 @@ public abstract class ReflectedFieldPointerKey extends AbstractFieldPointerKey { public static ReflectedFieldPointerKey index(InstanceKey instance) { return new ReflectedFieldPointerKey(instance) { + @Override public Object getFieldIdentifier() { return arrayStateKey; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ScopeMappingInstanceKeys.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ScopeMappingInstanceKeys.java index c6269491a..6a1251b23 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ScopeMappingInstanceKeys.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ScopeMappingInstanceKeys.java @@ -81,6 +81,7 @@ abstract public class ScopeMappingInstanceKeys implements InstanceKeyFactory { this.base = base; } + @Override public IClass getConcreteType() { return base.getConcreteType(); } @@ -113,15 +114,18 @@ abstract public class ScopeMappingInstanceKeys implements InstanceKeyFactory { } + @Override public int hashCode() { return base.hashCode() * creator.hashCode(); } + @Override public boolean equals(Object o) { return (o instanceof ScopeMappingInstanceKey) && ((ScopeMappingInstanceKey) o).base.equals(base) && ((ScopeMappingInstanceKey) o).creator.equals(creator); } + @Override public String toString() { return "SMIK:" + base + "@creator:" + creator; } @@ -134,10 +138,12 @@ abstract public class ScopeMappingInstanceKeys implements InstanceKeyFactory { return creator; } + @Override public Iterator> getCreationSites(CallGraph CG) { return new FilterIterator>( base.getCreationSites(CG), new Filter>() { + @Override public boolean accepts(Pair o) { return o.fst.equals(creator); } @@ -145,6 +151,7 @@ abstract public class ScopeMappingInstanceKeys implements InstanceKeyFactory { } } + @Override public InstanceKey getInstanceKeyForAllocation(CGNode creatorNode, NewSiteReference allocationSite) { InstanceKey base = basic.getInstanceKeyForAllocation(creatorNode, allocationSite); if (base != null && needsScopeMappingKey(base)) { @@ -159,18 +166,22 @@ abstract public class ScopeMappingInstanceKeys implements InstanceKeyFactory { */ protected abstract Collection getConstructorCallers(ScopeMappingInstanceKey smik, Pair name); + @Override public InstanceKey getInstanceKeyForMultiNewArray(CGNode node, NewSiteReference allocation, int dim) { return basic.getInstanceKeyForMultiNewArray(node, allocation, dim); } + @Override public InstanceKey getInstanceKeyForConstant(TypeReference type, Object S) { return basic.getInstanceKeyForConstant(type, S); } + @Override public InstanceKey getInstanceKeyForPEI(CGNode node, ProgramCounter instr, TypeReference type) { return basic.getInstanceKeyForPEI(node, instr, type); } + @Override public InstanceKey getInstanceKeyForClassObject(TypeReference type) { return basic.getInstanceKeyForClassObject(type); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ScriptEntryPoints.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ScriptEntryPoints.java index 0b1574e56..f90dc04e8 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ScriptEntryPoints.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ScriptEntryPoints.java @@ -35,10 +35,12 @@ public abstract class ScriptEntryPoints implements Iterable { super(scriptCodeBody); } + @Override public CallSiteReference makeSite(int programCounter) { return makeScriptSite(getMethod(), programCounter); } + @Override public TypeReference[] getParameterTypes(int i) { assert i == 0; if (getMethod().isStatic()) { @@ -48,11 +50,13 @@ public abstract class ScriptEntryPoints implements Iterable { } } + @Override public int getNumberOfParameters() { return getMethod().isStatic()? 0: 1; } + @Override public SSAAbstractInvokeInstruction addCall(AbstractRootMethod m){ CallSiteReference site = makeSite(0); @@ -81,6 +85,7 @@ public abstract class ScriptEntryPoints implements Iterable { return true; } + @Override public Iterator iterator() { Set ES = HashSetFactory.make(); Iterator classes = scriptType.getClassLoader().iterateAllClasses(); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/StandardFunctionTargetSelector.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/StandardFunctionTargetSelector.java index 363f2896f..9f9f40a2e 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/StandardFunctionTargetSelector.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/StandardFunctionTargetSelector.java @@ -31,6 +31,7 @@ public class StandardFunctionTargetSelector implements MethodTargetSelector { this.base = base; } + @Override public IMethod getCalleeTarget(CGNode caller, CallSiteReference site, IClass receiver) { ClassLoaderReference loader = (site.isStatic() || receiver==null)? diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/cha/CrossLanguageClassHierarchy.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/cha/CrossLanguageClassHierarchy.java index 4956956de..9be0ef27f 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/cha/CrossLanguageClassHierarchy.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/cha/CrossLanguageClassHierarchy.java @@ -60,10 +60,12 @@ public class CrossLanguageClassHierarchy implements IClassHierarchy { private final Map hierarchies; + @Override public ClassLoaderFactory getFactory() { return loaderFactory; } + @Override public AnalysisScope getScope() { return analysisScope; } @@ -96,6 +98,7 @@ public class CrossLanguageClassHierarchy implements IClassHierarchy { return getHierarchy(ref.getDeclaringClass()); } + @Override public IClassLoader[] getLoaders() { Set loaders = HashSetFactory.make(); for (Iterator ldrs = analysisScope.getLoaders().iterator(); ldrs.hasNext();) { @@ -105,14 +108,17 @@ public class CrossLanguageClassHierarchy implements IClassHierarchy { return (IClassLoader[]) loaders.toArray(new IClassLoader[loaders.size()]); } + @Override public IClassLoader getLoader(ClassLoaderReference loaderRef) { return getHierarchy(loaderRef).getLoader(loaderRef); } + @Override public boolean addClass(IClass klass) { return getHierarchy(klass).addClass(klass); } + @Override public int getNumberOfClasses() { int total = 0; for (Iterator ldrs = analysisScope.getLoaders().iterator(); ldrs.hasNext();) { @@ -122,43 +128,53 @@ public class CrossLanguageClassHierarchy implements IClassHierarchy { return total; } + @Override public boolean isRootClass(IClass c) { return getHierarchy(c).isRootClass(c); } + @Override public IClass getRootClass() { Assertions.UNREACHABLE(); return null; } + @Override public int getNumber(IClass c) { return getHierarchy(c).getNumber(c); } + @Override public Set getPossibleTargets(MethodReference ref) { return getHierarchy(ref).getPossibleTargets(ref); } + @Override public Set getPossibleTargets(IClass receiverClass, MethodReference ref) { return getHierarchy(ref).getPossibleTargets(receiverClass, ref); } + @Override public IMethod resolveMethod(MethodReference m) { return getHierarchy(m).resolveMethod(m); } + @Override public IField resolveField(FieldReference f) { return getHierarchy(f).resolveField(f); } + @Override public IField resolveField(IClass klass, FieldReference f) { return getHierarchy(klass).resolveField(klass, f); } + @Override public IMethod resolveMethod(IClass receiver, Selector selector) { return getHierarchy(receiver).resolveMethod(receiver, selector); } + @Override public IClass lookupClass(TypeReference A) { return getHierarchy(A).lookupClass(A); } @@ -167,56 +183,70 @@ public class CrossLanguageClassHierarchy implements IClassHierarchy { // return getHierarchy(c).isSyntheticClass(c); // } + @Override public boolean isInterface(TypeReference type) { return getHierarchy(type).isInterface(type); } + @Override public IClass getLeastCommonSuperclass(IClass A, IClass B) { return getHierarchy(A).getLeastCommonSuperclass(A, B); } + @Override public TypeReference getLeastCommonSuperclass(TypeReference A, TypeReference B) { return getHierarchy(A).getLeastCommonSuperclass(A, B); } + @Override public boolean isSubclassOf(IClass c, IClass T) { return getHierarchy(c).isSubclassOf(c, T); } + @Override public boolean implementsInterface(IClass c, IClass i) { return getHierarchy(c).implementsInterface(c, i); } + @Override public Collection computeSubClasses(TypeReference type) { return getHierarchy(type).computeSubClasses(type); } + @Override public Collection getJavaLangRuntimeExceptionTypes() { return getHierarchy(TypeReference.JavaLangRuntimeException).getJavaLangErrorTypes(); } + @Override public Collection getJavaLangErrorTypes() { return getHierarchy(TypeReference.JavaLangError).getJavaLangErrorTypes(); } + @Override public Set getImplementors(TypeReference type) { return getHierarchy(type).getImplementors(type); } + @Override public int getNumberOfImmediateSubclasses(IClass klass) { return getHierarchy(klass).getNumberOfImmediateSubclasses(klass); } + @Override public Collection getImmediateSubclasses(IClass klass) { return getHierarchy(klass).getImmediateSubclasses(klass); } + @Override public boolean isAssignableFrom(IClass c1, IClass c2) { return getHierarchy(c1).isAssignableFrom(c1, c2); } + @Override public Iterator iterator() { return new ComposedIterator(analysisScope.getLoaders().iterator()) { + @Override public Iterator makeInner(ClassLoaderReference o) { IClassLoader ldr = getLoader(o); return ldr.iterateAllClasses(); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/lexical/LexicalModRef.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/lexical/LexicalModRef.java index dc02115a3..3a5c10056 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/lexical/LexicalModRef.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/lexical/LexicalModRef.java @@ -58,6 +58,7 @@ public class LexicalModRef { Map>> scan = CallGraphTransitiveClosure.collectNodeResults(cg, new Function>>() { + @Override public Collection> apply(CGNode n) { return scanNodeForLexReads(n); } @@ -74,6 +75,7 @@ public class LexicalModRef { Map>> scan = CallGraphTransitiveClosure.collectNodeResults(cg, new Function>>() { + @Override public Collection> apply(CGNode n) { return scanNodeForLexWrites(n); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/modref/AstModRef.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/modref/AstModRef.java index 77dfc6b47..c1dc97d24 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/modref/AstModRef.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/modref/AstModRef.java @@ -39,43 +39,53 @@ public class AstModRef extends ModRef { super(n, result, pa, h); } + @Override public void visitAstLexicalRead(AstLexicalRead instruction) { } + @Override public void visitAstLexicalWrite(AstLexicalWrite instruction) { } + @Override public void visitAstGlobalRead(AstGlobalRead instruction) { } + @Override public void visitAstGlobalWrite(AstGlobalWrite instruction) { } + @Override public void visitAssert(AstAssertInstruction instruction) { } + @Override public void visitEachElementGet(EachElementGetInstruction inst) { } + @Override public void visitEachElementHasNext(EachElementHasNextInstruction inst) { } + @Override public void visitIsDefined(AstIsDefinedInstruction inst) { } + @Override public void visitEcho(AstEchoInstruction inst) { } } + @Override protected RefVisitor makeRefVisitor(CGNode n, Collection result, PointerAnalysis pa, ExtendedHeapModel h) { return new AstRefVisitor(n, result, pa, h); } @@ -89,38 +99,47 @@ public class AstModRef extends ModRef { super(n, result, h, pa, true); } + @Override public void visitAstLexicalRead(AstLexicalRead instruction) { } + @Override public void visitAstLexicalWrite(AstLexicalWrite instruction) { } + @Override public void visitAstGlobalRead(AstGlobalRead instruction) { } + @Override public void visitAstGlobalWrite(AstGlobalWrite instruction) { } + @Override public void visitAssert(AstAssertInstruction instruction) { } + @Override public void visitEachElementGet(EachElementGetInstruction inst) { } + @Override public void visitEachElementHasNext(EachElementHasNextInstruction inst) { } + @Override public void visitIsDefined(AstIsDefinedInstruction inst) { } + @Override public void visitEcho(AstEchoInstruction inst) { } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/cfg/AstInducedCFG.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/cfg/AstInducedCFG.java index 8f84f280d..e8ff6ebe9 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/cfg/AstInducedCFG.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/cfg/AstInducedCFG.java @@ -37,34 +37,43 @@ public class AstInducedCFG extends InducedCFG { super(r); } + @Override public void visitAstLexicalRead(AstLexicalRead inst) { } + @Override public void visitAstLexicalWrite(AstLexicalWrite inst) { } + @Override public void visitAstGlobalRead(AstGlobalRead instruction) { } + @Override public void visitAstGlobalWrite(AstGlobalWrite instruction) { } + @Override public void visitAssert(AstAssertInstruction instruction) { } + @Override public void visitEachElementHasNext(EachElementHasNextInstruction inst) { } + @Override public void visitEachElementGet(EachElementGetInstruction inst) { } + @Override public void visitIsDefined(AstIsDefinedInstruction inst) { } + @Override public void visitEcho(AstEchoInstruction inst) { } @@ -76,38 +85,49 @@ public class AstInducedCFG extends InducedCFG { super(r); } + @Override public void visitAstLexicalRead(AstLexicalRead inst) { } + @Override public void visitAstLexicalWrite(AstLexicalWrite inst) { } + @Override public void visitAstGlobalRead(AstGlobalRead instruction) { } + @Override public void visitAstGlobalWrite(AstGlobalWrite instruction) { } + @Override public void visitAssert(AstAssertInstruction instruction) { } + @Override public void visitEachElementHasNext(EachElementHasNextInstruction inst) { } + @Override public void visitEachElementGet(EachElementGetInstruction inst) { } + @Override public void visitIsDefined(AstIsDefinedInstruction inst) { } + @Override public void visitEcho(AstEchoInstruction inst) { } } + @Override protected BranchVisitor makeBranchVisitor(boolean[] r) { return new AstBranchVisitor(r); } + @Override protected PEIVisitor makePEIVisitor(boolean[] r) { return new AstPEIVisitor(r); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/cfg/DelegatingCFG.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/cfg/DelegatingCFG.java index a704c2acd..77bd61ce3 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/cfg/DelegatingCFG.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/cfg/DelegatingCFG.java @@ -29,54 +29,67 @@ public class DelegatingCFG> extends AbstractNumbered this.parent = parent; } + @Override protected NumberedNodeManager getNodeManager() { return parent; } + @Override protected NumberedEdgeManager getEdgeManager() { return parent; } + @Override public T entry() { return parent.entry(); } + @Override public T exit() { return parent.exit(); } + @Override public BitVector getCatchBlocks() { return parent.getCatchBlocks(); } + @Override public T getBlockForInstruction(int index) { return parent.getBlockForInstruction(index); } + @Override public I[] getInstructions() { return parent.getInstructions(); } + @Override public int getProgramCounter(int index) { return parent.getProgramCounter(index); } + @Override public IMethod getMethod() { return parent.getMethod(); } + @Override public List getExceptionalSuccessors(T b) { return parent.getExceptionalSuccessors(b); } + @Override public Collection getNormalSuccessors(T b) { return parent.getNormalSuccessors(b); } + @Override public Collection getExceptionalPredecessors(T b) { return parent.getExceptionalPredecessors(b); } + @Override public Collection getNormalPredecessors(T b) { return parent.getNormalPredecessors(b); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AbstractLexicalInvoke.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AbstractLexicalInvoke.java index d757cd8a1..28f575973 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AbstractLexicalInvoke.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AbstractLexicalInvoke.java @@ -45,6 +45,7 @@ public abstract class AbstractLexicalInvoke extends MultiReturnValueInvokeInstru this.lexicalWrites = lexicalWrites; } + @Override public int getNumberOfUses() { if (lexicalReads == null) return getNumberOfParameters(); @@ -76,6 +77,7 @@ public abstract class AbstractLexicalInvoke extends MultiReturnValueInvokeInstru } } + @Override public int getUse(int j) { assert j >= getNumberOfParameters(); assert lexicalReads != null; @@ -83,6 +85,7 @@ public abstract class AbstractLexicalInvoke extends MultiReturnValueInvokeInstru return lexicalReads[j - getNumberOfParameters()].valueNumber; } + @Override public int getNumberOfDefs() { if (lexicalWrites == null) return super.getNumberOfDefs(); @@ -90,6 +93,7 @@ public abstract class AbstractLexicalInvoke extends MultiReturnValueInvokeInstru return super.getNumberOfDefs() + lexicalWrites.length; } + @Override public int getDef(int j) { if (j < super.getNumberOfDefs()) return super.getDef(j); @@ -132,10 +136,12 @@ public abstract class AbstractLexicalInvoke extends MultiReturnValueInvokeInstru return lexicalWrites[i - super.getNumberOfDefs()]; } + @Override public int hashCode() { return site.hashCode() * 7529; } + @Override public String toString(SymbolTable symbolTable) { StringBuffer s = new StringBuffer(super.toString(symbolTable)); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AbstractReflectiveGet.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AbstractReflectiveGet.java index fcf756105..301a789d8 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AbstractReflectiveGet.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AbstractReflectiveGet.java @@ -28,6 +28,7 @@ public abstract class AbstractReflectiveGet extends ReflectiveMemberAccess { this.result = result; } + @Override public String toString(SymbolTable symbolTable) { return getValueString(symbolTable, result) + " = " + super.toString(symbolTable); } @@ -35,14 +36,17 @@ public abstract class AbstractReflectiveGet extends ReflectiveMemberAccess { /** * @see com.ibm.wala.ssa.Instruction#getDef() */ + @Override public boolean hasDef() { return true; } + @Override public int getDef() { return result; } + @Override public int getDef(int i) { return result; } @@ -50,10 +54,12 @@ public abstract class AbstractReflectiveGet extends ReflectiveMemberAccess { /** * @see com.ibm.wala.ssa.Instruction#getNumberOfUses() */ + @Override public int getNumberOfUses() { return 2; } + @Override public int getNumberOfDefs() { return 1; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AbstractReflectivePut.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AbstractReflectivePut.java index e2afea811..2699a6d57 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AbstractReflectivePut.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AbstractReflectivePut.java @@ -28,6 +28,7 @@ public abstract class AbstractReflectivePut extends ReflectiveMemberAccess { this.value = value; } + @Override public String toString(SymbolTable symbolTable) { return super.toString(symbolTable) + " = " + getValueString(symbolTable, value); } @@ -35,6 +36,7 @@ public abstract class AbstractReflectivePut extends ReflectiveMemberAccess { /** * @see com.ibm.wala.ssa.Instruction#getDef() */ + @Override public int getDef() { return -1; } @@ -42,6 +44,7 @@ public abstract class AbstractReflectivePut extends ReflectiveMemberAccess { /** * @see com.ibm.wala.ssa.Instruction#getNumberOfUses() */ + @Override public int getNumberOfUses() { return 3; } @@ -50,6 +53,7 @@ public abstract class AbstractReflectivePut extends ReflectiveMemberAccess { return getUse(2); } + @Override public int getUse(int index) { if (index == 2) return value; diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AssignInstruction.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AssignInstruction.java index 76cc1d1f3..5c635cfdd 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AssignInstruction.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AssignInstruction.java @@ -40,6 +40,7 @@ public class AssignInstruction extends SSAUnaryOpInstruction { /* * @see com.ibm.wala.ssa.SSAInstruction#copyForSSA(int[], int[]) */ + @Override public SSAInstruction copyForSSA(SSAInstructionFactory insts, int[] defs, int[] uses) { return ((AstInstructionFactory) insts) .AssignInstruction(defs == null ? getDef(0) : defs[0], uses == null ? getUse(0) : uses[0]); @@ -48,6 +49,7 @@ public class AssignInstruction extends SSAUnaryOpInstruction { /* * @see com.ibm.wala.ssa.SSAInstruction#toString(com.ibm.wala.ssa.SymbolTable, com.ibm.wala.ssa.ValueDecorator) */ + @Override public String toString(SymbolTable symbolTable) { return getValueString(symbolTable, result) + " := " + getValueString(symbolTable, val); } @@ -55,6 +57,7 @@ public class AssignInstruction extends SSAUnaryOpInstruction { /* * @see com.ibm.wala.ssa.SSAInstruction#visit(com.ibm.wala.ssa.SSAInstruction.Visitor) */ + @Override public void visit(IVisitor v) { ((AstPreInstructionVisitor) v).visitAssign(this); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstAbstractInstructionVisitor.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstAbstractInstructionVisitor.java index c189d7ed3..9fd7b7b00 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstAbstractInstructionVisitor.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstAbstractInstructionVisitor.java @@ -17,38 +17,47 @@ public abstract class AstAbstractInstructionVisitor implements AstInstructionVisitor { + @Override public void visitAstLexicalRead(AstLexicalRead instruction) { } + @Override public void visitAstLexicalWrite(AstLexicalWrite instruction) { } + @Override public void visitAstGlobalRead(AstGlobalRead instruction) { } + @Override public void visitAstGlobalWrite(AstGlobalWrite instruction) { } + @Override public void visitAssert(AstAssertInstruction instruction) { } + @Override public void visitEachElementGet(EachElementGetInstruction inst) { } + @Override public void visitEachElementHasNext(EachElementHasNextInstruction inst) { } + @Override public void visitIsDefined(AstIsDefinedInstruction inst) { } + @Override public void visitEcho(AstEchoInstruction inst) { } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstAssertInstruction.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstAssertInstruction.java index 68029ea3e..9fe8c773f 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstAssertInstruction.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstAssertInstruction.java @@ -37,35 +37,43 @@ public class AstAssertInstruction extends SSAInstruction { this.fromSpecification = fromSpecification; } + @Override public int getNumberOfUses() { return 1; } + @Override public int getUse(int i) { assert i == 0; return value; } + @Override public SSAInstruction copyForSSA(SSAInstructionFactory insts, int[] defs, int[] uses) { return ((AstInstructionFactory)insts).AssertInstruction(uses == null ? value : uses[0], fromSpecification); } + @Override public String toString(SymbolTable symbolTable) { return "assert " + getValueString(symbolTable, value) + " (fromSpec: " + fromSpecification + ")"; } + @Override public void visit(IVisitor v) { ((AstInstructionVisitor) v).visitAssert(this); } + @Override public int hashCode() { return 2177 * value; } + @Override public Collection getExceptionTypes() { return null; } + @Override public boolean isFallThrough() { return true; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstConstants.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstConstants.java index ec76537a3..ff47576d5 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstConstants.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstConstants.java @@ -18,6 +18,7 @@ public interface AstConstants { public enum BinaryOp implements IBinaryOpInstruction.IOperator { CONCAT, EQ, NE, LT, GE, GT, LE, STRICT_EQ, STRICT_NE; + @Override public String toString() { return super.toString().toLowerCase(); } @@ -26,6 +27,7 @@ public interface AstConstants { public enum UnaryOp implements IUnaryOpInstruction.IOperator { MINUS, BITNOT, PLUS; + @Override public String toString() { return super.toString().toLowerCase(); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstEchoInstruction.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstEchoInstruction.java index e33aecd2d..5109ddbc6 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstEchoInstruction.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstEchoInstruction.java @@ -26,27 +26,33 @@ public class AstEchoInstruction extends SSAInstruction { this.rvals = rvals; } + @Override public SSAInstruction copyForSSA(SSAInstructionFactory insts, int[] defs, int[] uses) { return ((AstInstructionFactory)insts).EchoInstruction(uses==null? rvals: uses); } + @Override public int getNumberOfDefs() { return 0; } + @Override public int getDef(int i) { Assertions.UNREACHABLE(); return -1; } + @Override public int getNumberOfUses() { return rvals.length; } + @Override public int getUse(int i) { return rvals[i]; } + @Override public int hashCode() { int v = 1; for(int i = 0;i < rvals.length; i++) { @@ -56,6 +62,7 @@ public class AstEchoInstruction extends SSAInstruction { return v; } + @Override public String toString(SymbolTable symbolTable) { StringBuffer result = new StringBuffer("echo/print "); for(int i = 0; i < rvals.length; i++) { @@ -65,14 +72,17 @@ public class AstEchoInstruction extends SSAInstruction { return result.toString(); } + @Override public void visit(IVisitor v) { ((AstInstructionVisitor)v).visitEcho(this); } + @Override public boolean isFallThrough() { return true; } + @Override public Collection getExceptionTypes() { return Collections.emptySet(); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstGlobalRead.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstGlobalRead.java index ace71ce68..333e4787e 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstGlobalRead.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstGlobalRead.java @@ -30,23 +30,28 @@ public class AstGlobalRead extends SSAGetInstruction { super(lhs, global); } + @Override public SSAInstruction copyForSSA(SSAInstructionFactory insts, int[] defs, int[] uses) { return ((AstInstructionFactory)insts).GlobalRead((defs==null)? getDef(): defs[0], getDeclaredField()); } + @Override public String toString(SymbolTable symbolTable) { return getValueString(symbolTable, getDef()) + " = global:" + getGlobalName(); } + @Override public void visit(IVisitor v) { if (v instanceof AstInstructionVisitor) ((AstInstructionVisitor)v).visitAstGlobalRead(this); } + @Override public boolean isFallThrough() { return true; } + @Override public Collection getExceptionTypes() { return null; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstGlobalWrite.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstGlobalWrite.java index 85d9dc773..5bf5130d4 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstGlobalWrite.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstGlobalWrite.java @@ -30,23 +30,28 @@ public class AstGlobalWrite extends SSAPutInstruction { super(rhs, global); } + @Override public SSAInstruction copyForSSA(SSAInstructionFactory insts, int[] defs, int[] uses) { return ((AstInstructionFactory)insts).GlobalWrite(getDeclaredField(), (uses==null)? getVal(): uses[0]); } + @Override public String toString(SymbolTable symbolTable) { return "global:" + getGlobalName() + " = " + getValueString(symbolTable,getVal()); } + @Override public void visit(IVisitor v) { if (v instanceof AstInstructionVisitor) ((AstInstructionVisitor)v).visitAstGlobalWrite(this); } + @Override public boolean isFallThrough() { return true; } + @Override public Collection getExceptionTypes() { return null; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstIsDefinedInstruction.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstIsDefinedInstruction.java index ebaf873c8..c74257fc2 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstIsDefinedInstruction.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstIsDefinedInstruction.java @@ -77,6 +77,7 @@ public class AstIsDefinedInstruction extends SSAInstruction { this.fieldRef = null; } + @Override public SSAInstruction copyForSSA(SSAInstructionFactory insts, int[] defs, int[] uses) { assert fieldVal == -1 || fieldRef == null; @@ -84,6 +85,7 @@ public class AstIsDefinedInstruction extends SSAInstruction { (uses == null || fieldVal == -1) ? fieldVal : uses[1], fieldRef); } + @Override public String toString(SymbolTable symbolTable) { if (fieldVal == -1 && fieldRef == null) { return getValueString(symbolTable, lval) + " = isDefined(" + getValueString(symbolTable, rval) + ")"; @@ -99,36 +101,44 @@ public class AstIsDefinedInstruction extends SSAInstruction { } } + @Override public void visit(IVisitor v) { ((AstInstructionVisitor) v).visitIsDefined(this); } + @Override public Collection getExceptionTypes() { return Collections.emptySet(); } + @Override public boolean hasDef() { return true; } + @Override public int getDef() { return lval; } + @Override public int getDef(int i) { assert i == 0; return lval; } + @Override public int getNumberOfDefs() { return 1; } + @Override public int getNumberOfUses() { return (fieldVal == -1) ? 1 : 2; } + @Override public int getUse(int j) { if (j == 0) { return rval; @@ -140,10 +150,12 @@ public class AstIsDefinedInstruction extends SSAInstruction { } } + @Override public boolean isFallThrough() { return true; } + @Override public int hashCode() { return 3077 * fieldVal * rval; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstLexicalAccess.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstLexicalAccess.java index 29f5cb31a..45aa60bcc 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstLexicalAccess.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstLexicalAccess.java @@ -54,10 +54,12 @@ public abstract class AstLexicalAccess extends SSAInstruction { return Pair.make(variableName, variableDefiner); } + @Override public int hashCode() { return variableName.hashCode() * valueNumber; } + @Override public boolean equals(Object other) { return (other instanceof Access) && variableName.equals( ((Access)other).variableName ) && @@ -67,6 +69,7 @@ public abstract class AstLexicalAccess extends SSAInstruction { variableDefiner.equals(((Access)other).variableDefiner) ); } + @Override public String toString() { return "Access(" + variableName + "@" + variableDefiner + ":" + valueNumber + ")"; } @@ -94,14 +97,17 @@ public abstract class AstLexicalAccess extends SSAInstruction { return accesses.length; } + @Override public boolean isFallThrough() { return true; } + @Override public Collection getExceptionTypes() { return null; } + @Override public int hashCode() { int v = 1; for(int i = 0; i < accesses.length; i++) diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstLexicalRead.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstLexicalRead.java index 60175fcfd..010e91e23 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstLexicalRead.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstLexicalRead.java @@ -36,6 +36,7 @@ public class AstLexicalRead extends AstLexicalAccess { this(new Access(globalName, definer, lhs)); } + @Override public SSAInstruction copyForSSA(SSAInstructionFactory insts, int[] defs, int[] uses) { if (defs == null) { return new AstLexicalRead(getAccesses()); @@ -50,22 +51,27 @@ public class AstLexicalRead extends AstLexicalAccess { } } + @Override public int getNumberOfDefs() { return getAccessCount(); } + @Override public int getDef(int i) { return getAccess(i).valueNumber; } + @Override public int getNumberOfUses() { return 0; } + @Override public int getUse(int i) { throw new UnsupportedOperationException(); } + @Override public String toString(SymbolTable symbolTable) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < getAccessCount(); i++) { @@ -82,6 +88,7 @@ public class AstLexicalRead extends AstLexicalAccess { return sb.toString(); } + @Override public void visit(IVisitor v) { assert v instanceof AstInstructionVisitor; ((AstInstructionVisitor) v).visitAstLexicalRead(this); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstLexicalWrite.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstLexicalWrite.java index 9324b5ac0..0fc1241a2 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstLexicalWrite.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstLexicalWrite.java @@ -36,6 +36,7 @@ public class AstLexicalWrite extends AstLexicalAccess { super(accesses); } + @Override public SSAInstruction copyForSSA(SSAInstructionFactory insts, int[] defs, int[] uses) { if (uses == null) { return new AstLexicalWrite(getAccesses()); @@ -50,22 +51,27 @@ public class AstLexicalWrite extends AstLexicalAccess { } } + @Override public int getNumberOfUses() { return getAccessCount(); } + @Override public int getUse(int i) { return getAccess(i).valueNumber; } + @Override public int getNumberOfDefs() { return 0; } + @Override public int getDef(int i) { throw new UnsupportedOperationException(); } + @Override public String toString(SymbolTable symbolTable) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < getAccessCount(); i++) { @@ -83,6 +89,7 @@ public class AstLexicalWrite extends AstLexicalAccess { return sb.toString(); } + @Override public void visit(IVisitor v) { assert v instanceof AstInstructionVisitor; ((AstInstructionVisitor) v).visitAstLexicalWrite(this); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/EachElementGetInstruction.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/EachElementGetInstruction.java index c51a19d8f..1e8bd2d10 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/EachElementGetInstruction.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/EachElementGetInstruction.java @@ -35,18 +35,22 @@ public class EachElementGetInstruction extends SSAAbstractUnaryInstruction { super(lValue, objectRef); } + @Override public SSAInstruction copyForSSA(SSAInstructionFactory insts, int[] defs, int[] uses) { return ((AstInstructionFactory)insts).EachElementGetInstruction((defs == null) ? getDef(0) : defs[0], (uses == null) ? getUse(0) : uses[0]); } + @Override public String toString(SymbolTable symbolTable) { return getValueString(symbolTable, getDef(0)) + " = a property name of " + getValueString(symbolTable, getUse(0)); } + @Override public void visit(IVisitor v) { ((AstInstructionVisitor) v).visitEachElementGet(this); } + @Override public Collection getExceptionTypes() { return Collections.emptySet(); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/EachElementHasNextInstruction.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/EachElementHasNextInstruction.java index 8bf5d9463..70ff36363 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/EachElementHasNextInstruction.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/EachElementHasNextInstruction.java @@ -35,18 +35,22 @@ public class EachElementHasNextInstruction extends SSAAbstractUnaryInstruction { super(lValue, objectRef); } + @Override public SSAInstruction copyForSSA(SSAInstructionFactory insts, int[] defs, int[] uses) { return ((AstInstructionFactory)insts).EachElementHasNextInstruction((defs == null) ? getDef(0) : defs[0], (uses == null) ? getUse(0) : uses[0]); } + @Override public String toString(SymbolTable symbolTable) { return getValueString(symbolTable, getDef(0)) + " = has next property: " + getValueString(symbolTable, getUse(0)); } + @Override public void visit(IVisitor v) { ((AstInstructionVisitor) v).visitEachElementHasNext(this); } + @Override public Collection getExceptionTypes() { return Collections.emptySet(); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/FixedParametersLexicalInvokeInstruction.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/FixedParametersLexicalInvokeInstruction.java index ccf036fcd..052776045 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/FixedParametersLexicalInvokeInstruction.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/FixedParametersLexicalInvokeInstruction.java @@ -59,6 +59,7 @@ public abstract class FixedParametersLexicalInvokeInstruction protected abstract SSAInstruction copyInstruction(SSAInstructionFactory insts, int result[], int[] params, int exception, Access[] lexicalReads, Access[] lexicalWrites); + @Override public SSAInstruction copyForSSA(SSAInstructionFactory insts, int[] defs, int[] uses) { int newParams[] = params; Access[] reads = lexicalReads; @@ -104,6 +105,7 @@ public abstract class FixedParametersLexicalInvokeInstruction return copyInstruction(insts, newLvals, newParams, newExp, reads, writes); } + @Override public int getNumberOfParameters() { if (params == null) { return 0; @@ -115,6 +117,7 @@ public abstract class FixedParametersLexicalInvokeInstruction /** * @see com.ibm.wala.ssa.Instruction#getUse(int) */ + @Override public int getUse(int j) { if (j < getNumberOfParameters()) return params[j]; diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/MultiReturnValueInvokeInstruction.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/MultiReturnValueInvokeInstruction.java index c74e8d0cc..1688ff92d 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/MultiReturnValueInvokeInstruction.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/MultiReturnValueInvokeInstruction.java @@ -23,10 +23,12 @@ abstract class MultiReturnValueInvokeInstruction this.results = results; } + @Override public int getNumberOfReturnValues() { return results==null? 0: results.length; } + @Override public int getReturnValue(int i) { return results[i]; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/analysis/LiveAnalysis.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/analysis/LiveAnalysis.java index 17fe6ba00..235f95d32 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/analysis/LiveAnalysis.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/analysis/LiveAnalysis.java @@ -86,14 +86,17 @@ public class LiveAnalysis { * Gen/kill operator specific to exit basic blocks */ final class ExitBlockGenKillOperator extends UnaryOperator { + @Override public String toString() { return "ExitGenKill"; } + @Override public boolean equals(Object o) { return o == this; } + @Override public int hashCode() { return 37721; } @@ -101,6 +104,7 @@ public class LiveAnalysis { /** * Evaluate the transfer between two nodes in the flow graph within an exit block. */ + @Override public byte evaluate(BitVectorVariable lhs, BitVectorVariable rhs) { boolean changed = lhs.getValue() == null ? !considerLiveAtExit.isZero() : !lhs.getValue().sameValue(liveAtExit); @@ -120,14 +124,17 @@ public class LiveAnalysis { this.block = block; } + @Override public String toString() { return "GenKill:" + block; } + @Override public boolean equals(Object o) { return (o instanceof BlockValueGenKillOperator) && ((BlockValueGenKillOperator) o).block.equals(block); } + @Override public int hashCode() { return block.hashCode() * 17; } @@ -156,6 +163,7 @@ public class LiveAnalysis { /** * Evaluate the transfer between two nodes in the flow graph within one basic block. */ + @Override public byte evaluate(BitVectorVariable lhs, BitVectorVariable rhs) { // Calculate here the result of the transfer BitVectorIntSet bits = new BitVectorIntSet(); @@ -204,17 +212,21 @@ public class LiveAnalysis { final BitVectorSolver S = new BitVectorSolver(new IKilldallFramework() { private final Graph G = GraphInverter.invert(cfg); + @Override public Graph getFlowGraph() { return G; } + @Override public ITransferFunctionProvider getTransferFunctionProvider() { return new ITransferFunctionProvider() { + @Override public boolean hasNodeTransferFunctions() { return true; } + @Override public boolean hasEdgeTransferFunctions() { return false; } @@ -222,6 +234,7 @@ public class LiveAnalysis { /** * Create the specialized operator for regular and exit basic blocks. */ + @Override public UnaryOperator getNodeTransferFunction(ISSABasicBlock node) { if (node.isExitBlock()) { return new ExitBlockGenKillOperator(); @@ -230,6 +243,7 @@ public class LiveAnalysis { } } + @Override public UnaryOperator getEdgeTransferFunction(ISSABasicBlock s, ISSABasicBlock d) { Assertions.UNREACHABLE(); return null; @@ -238,6 +252,7 @@ public class LiveAnalysis { /** * Live analysis uses 'union' as 'meet operator' */ + @Override public AbstractMeetOperator getMeetOperator() { return BitVectorUnion.instance(); } @@ -259,6 +274,7 @@ public class LiveAnalysis { */ return new Result() { + @Override public String toString() { StringBuffer s = new StringBuffer(); for (int i = 0; i < cfg.getNumberOfNodes(); i++) { @@ -270,10 +286,12 @@ public class LiveAnalysis { return s.toString(); } + @Override public boolean isLiveEntry(ISSABasicBlock bb, int valueNumber) { return S.getOut(bb).get(valueNumber); } + @Override public boolean isLiveExit(ISSABasicBlock bb, int valueNumber) { return S.getIn(bb).get(valueNumber); } @@ -285,6 +303,7 @@ public class LiveAnalysis { * @see * how the 'in' and 'out' variable sets work */ + @Override public BitVector getLiveBefore(int instr) { ISSABasicBlock bb = cfg.getBlockForInstruction(instr); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractClassEntity.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractClassEntity.java index c4782e5a7..46faaf4d0 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractClassEntity.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractClassEntity.java @@ -15,22 +15,27 @@ public class AbstractClassEntity extends AbstractDataEntity { this.type = type; } + @Override public String toString() { return "class " + type.getName(); } + @Override public int getKind() { return TYPE_ENTITY; } + @Override public String getName() { return type.getName(); } + @Override public CAstType getType() { return type; } + @Override public Collection getQualifiers() { return type.getQualifiers(); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractCodeEntity.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractCodeEntity.java index 61f296f5b..81f086265 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractCodeEntity.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractCodeEntity.java @@ -28,22 +28,27 @@ public abstract class AbstractCodeEntity extends AbstractEntity { this.type = type; } + @Override public CAstNode getAST() { return Ast; } + @Override public CAstType getType() { return type; } + @Override public CAstControlFlowMap getControlFlow() { return cfg; } + @Override public CAstSourcePositionMap getSourceMap() { return src; } + @Override public CAstNodeTypeMap getNodeTypeMap() { return types; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractDataEntity.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractDataEntity.java index 0ffeabe7a..78b53c112 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractDataEntity.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractDataEntity.java @@ -9,30 +9,37 @@ import com.ibm.wala.cast.tree.CAstNodeTypeMap; import com.ibm.wala.cast.tree.CAstSourcePositionMap; abstract class AbstractDataEntity extends AbstractEntity { + @Override public CAstNode getAST() { return null; } + @Override public CAstControlFlowMap getControlFlow() { return null; } + @Override public CAstSourcePositionMap getSourceMap() { return null; } + @Override public CAstNodeTypeMap getNodeTypeMap() { return null; } + @Override public String[] getArgumentNames() { return new String[0]; } + @Override public CAstNode[] getArgumentDefaults() { return new CAstNode[0]; } + @Override public int getArgumentCount() { return 0; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractEntity.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractEntity.java index f0c9c99e9..c2604e809 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractEntity.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractEntity.java @@ -21,16 +21,19 @@ public abstract class AbstractEntity implements CAstEntity { private final Map> scopedEntities = HashMapFactory.make(); + @Override public Map> getAllScopedEntities() { return scopedEntities; } + @Override public String getSignature() { Assertions.UNREACHABLE(); return null; } + @Override public Collection getAnnotations() { return null; } @@ -39,10 +42,12 @@ public abstract class AbstractEntity implements CAstEntity { sourcePosition = pos; } + @Override public Position getPosition() { return sourcePosition; } + @Override public Iterator getScopedEntities(CAstNode construct) { if (scopedEntities.containsKey(construct)) { return scopedEntities.get(construct).iterator(); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractFieldEntity.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractFieldEntity.java index 0f1f1f11e..90cc2d8e4 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractFieldEntity.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractFieldEntity.java @@ -32,23 +32,28 @@ class AbstractFieldEntity extends AbstractDataEntity { } } + @Override public String toString() { return "field " + name + " of " + declaringClass.getName(); } + @Override public int getKind() { return FIELD_ENTITY; } + @Override public String getName() { return name; } + @Override public CAstType getType() { Assertions.UNREACHABLE(); return null; } + @Override public Collection getQualifiers() { return modifiers; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractGlobalEntity.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractGlobalEntity.java index d5002e32c..9578f64a8 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractGlobalEntity.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractGlobalEntity.java @@ -26,6 +26,7 @@ public class AbstractGlobalEntity extends AbstractDataEntity { } } + @Override public String toString() { if (type == null) { return "global " + name; @@ -34,18 +35,22 @@ public class AbstractGlobalEntity extends AbstractDataEntity { } } + @Override public int getKind() { return GLOBAL_ENTITY; } + @Override public String getName() { return name; } + @Override public CAstType getType() { return type; } + @Override public Collection getQualifiers() { return modifiers; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractScriptEntity.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractScriptEntity.java index ecb6ff5de..301973d57 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractScriptEntity.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractScriptEntity.java @@ -23,6 +23,7 @@ public class AbstractScriptEntity extends AbstractCodeEntity { this(new File(file), type); } + @Override public int getKind() { return SCRIPT_ENTITY; } @@ -31,26 +32,32 @@ public class AbstractScriptEntity extends AbstractCodeEntity { return file; } + @Override public String getName() { return "script " + file.getName(); } + @Override public String toString() { return "script " + file.getName(); } + @Override public String[] getArgumentNames() { return new String[] { "script object" }; } + @Override public CAstNode[] getArgumentDefaults() { return new CAstNode[0]; } + @Override public int getArgumentCount() { return 1; } + @Override public Collection getQualifiers() { return Collections.emptySet(); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java index 3ce431333..6c8a29b34 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java @@ -158,11 +158,13 @@ public abstract class AstTranslator extends CAstVisitor instructions = new ArrayList(); + @Override public int getNumber() { return getGraphNodeId(); } + @Override public int getGraphNodeId() { return number; } + @Override public void setGraphNodeId(int number) { this.number = number; } + @Override public int getFirstInstructionIndex() { return firstIndex; } @@ -554,6 +563,7 @@ public abstract class AstTranslator extends CAstVisitor -1) && (instructions.get(0) instanceof SSAGetCaughtExceptionInstruction); } + @Override public IMethod getMethod() { return null; } + @Override public Iterator iterator() { return instructions.iterator(); } @@ -624,10 +640,12 @@ public abstract class AstTranslator extends CAstVisitor, CAstNode> nodeMap, CAstNode oldSource, Object label, CAstNode oldTarget, CAstControlFlowMap orig, CAstSourcePositionMap src) { if (exception && !isExceptionLabel(label)) { @@ -734,10 +753,12 @@ public abstract class AstTranslator extends CAstVisitor>make() : null; if (hasDeadBlocks) { transferEdges(liveBlocks, icfg, new EdgeOperation() { + @Override public void act(PreBasicBlock src, PreBasicBlock dst) { if (! normalEdges.containsKey(src)) { normalEdges.put(src, HashSetFactory.make()); @@ -1116,6 +1139,7 @@ public abstract class AstTranslator extends CAstVisitormake()); @@ -1167,10 +1191,12 @@ public abstract class AstTranslator extends CAstVisitor getAllNames() { return values.keySet().iterator(); } + @Override public int allocateTempValue() { return getUnderlyingSymtab().newSymbol(); } + @Override public int getConstantValue(Object o) { if (o instanceof Integer) { return getUnderlyingSymtab().getConstant(((Integer) o).intValue()); @@ -1446,14 +1494,17 @@ public abstract class AstTranslator extends CAstVisitor getAllNames() { return globalSymbols.keySet().iterator(); } + @Override public int allocateTempValue() { throw new UnsupportedOperationException(); } + @Override public int getConstantValue(Object c) { throw new UnsupportedOperationException(); } + @Override public boolean isConstant(int valueNumber) { throw new UnsupportedOperationException(); } + @Override public Object getConstantObject(int valueNumber) { throw new UnsupportedOperationException(); } + @Override public ScopeType type() { return ScopeType.GLOBAL; } + @Override public boolean contains(String name) { return hasImplicitGlobals() || globalSymbols.containsKey(mapName(name)); } + @Override public boolean isCaseInsensitive(String name) { return caseInsensitiveNames.containsKey(name.toLowerCase()); } + @Override public Symbol lookup(final String name) { if (!globalSymbols.containsKey(mapName(name))) { if (hasImplicitGlobals()) { declare(new CAstSymbol() { + @Override public String name() { return name; } + @Override public boolean isFinal() { return false; } + @Override public boolean isCaseInsensitive() { return false; } + @Override public boolean isInternalName() { return false; } + @Override public Object defaultInitValue() { return null; } @@ -1851,29 +1963,35 @@ public abstract class AstTranslator extends CAstVisitor getAllNames() { return typeSymbols.keySet().iterator(); } + @Override public int allocateTempValue() { throw new UnsupportedOperationException(); } + @Override public int getConstantValue(Object c) { throw new UnsupportedOperationException(); } + @Override public boolean isConstant(int valueNumber) { throw new UnsupportedOperationException(); } + @Override public Object getConstantObject(int valueNumber) { throw new UnsupportedOperationException(); } + @Override public ScopeType type() { return ScopeType.TYPE; } + @Override public boolean contains(String name) { return typeSymbols.containsKey(mapName(name)); } + @Override public boolean isCaseInsensitive(String name) { return caseInsensitiveNames.containsKey(name.toLowerCase()); } + @Override public Symbol lookup(String nm) { if (typeSymbols.containsKey(mapName(nm))) return typeSymbols.get(mapName(nm)); @@ -1951,29 +2083,35 @@ public abstract class AstTranslator extends CAstVisitor getAccesses(CAstEntity e) { return parent.getAccesses(e); } + @Override public ModuleEntry getModule() { return parent.getModule(); } + @Override public String getName() { return parent.getName(); } + @Override public String file() { return parent.file(); } + @Override public CAstEntity top() { return parent.top(); } + @Override public CAstSourcePositionMap getSourceMap() { return parent.getSourceMap(); } + @Override public CAstControlFlowMap getControlFlow() { return parent.getControlFlow(); } + @Override public Scope currentScope() { return parent.currentScope(); } + @Override public Set entityScopes() { return parent.entityScopes(); } + @Override public IncipientCFG cfg() { return parent.cfg(); } + @Override public UnwindState getUnwindState() { return parent.getUnwindState(); } + @Override public void setCatchType(IBasicBlock bb, TypeReference catchType) { parent.setCatchType(bb, catchType); } + @Override public void setCatchType(CAstNode catchNode, TypeReference catchType) { parent.setCatchType(catchNode, catchType); } + @Override public Map getCatchTypes() { return parent.getCatchTypes(); } + @Override public void addEntityName(CAstEntity e, String name) { parent.addEntityName(e, name); } + @Override public String getEntityName(CAstEntity e) { return parent.getEntityName(e); } + @Override public boolean hasValue(CAstNode n) { return parent.hasValue(n); } + @Override public int setValue(CAstNode n, int v) { return parent.setValue(n, v); } + @Override public int getValue(CAstNode n) { return parent.getValue(n); } + @Override public Set, Integer>> exposeNameSet(CAstEntity entity, boolean writeSet) { return parent.exposeNameSet(entity, writeSet); } + @Override public Scope getGlobalScope() { return parent.getGlobalScope(); } @@ -2127,6 +2287,7 @@ public abstract class AstTranslator extends CAstVisitor getAccesses(CAstEntity e) { if (e == topNode) { if (accesses == null) { @@ -2233,30 +2399,37 @@ public abstract class AstTranslator extends CAstVisitor entityScopes() { return allEntityScopes; } + @Override public UnwindState getUnwindState() { return null; } + @Override public void setCatchType(CAstNode catchNode, TypeReference catchType) { setCatchType(cfg.getBlock(catchNode), catchType); } + @Override public void setCatchType(IBasicBlock bb, TypeReference catchType) { if (! catchTypes.containsKey(bb)) { catchTypes.put(bb, new TypeReference[] { catchType }); @@ -2277,19 +2450,23 @@ public abstract class AstTranslator extends CAstVisitor getCatchTypes() { return catchTypes; } + @Override public boolean hasValue(CAstNode n) { return results.containsKey(n); } + @Override public final int setValue(CAstNode n, int v) { results.put(n, new Integer(v)); return v; } + @Override public final int getValue(CAstNode n) { if (results.containsKey(n)) return results.get(n).intValue(); @@ -2309,16 +2486,19 @@ public abstract class AstTranslator extends CAstVisitor[] getExposedNames() { return exposedNames; } + @Override public String[] getScopingParents() { return scopingParents; } + @Override public boolean isReadOnly(String name) { return readOnlyNames != null && readOnlyNames.contains(name); } + @Override public String getScopingName() { return functionLexicalName; } @@ -2799,14 +2987,17 @@ public abstract class AstTranslator extends CAstVisitor visitor) { if (DEBUG_TOP) System.err.println(("translating " + n.getName())); return false; } + @Override protected boolean visitFileEntity(CAstEntity n, WalkContext context, WalkContext fileContext, CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveFileEntity(CAstEntity n, WalkContext context, WalkContext fileContext, CAstVisitor visitor) { /* empty */ } + @Override protected boolean visitFieldEntity(CAstEntity n, WalkContext context, CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveFieldEntity(CAstEntity n, WalkContext context, CAstVisitor visitor) { // Define a new field in the enclosing type, if the language we're // processing allows such. @@ -2842,23 +3038,28 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveGlobalEntity(CAstEntity n, WalkContext context, CAstVisitor visitor) { // Define a new field in the enclosing type, if the language we're // processing allows such. context.getGlobalScope().declare(new CAstSymbolImpl(n.getName())); } + @Override protected boolean visitTypeEntity(CAstEntity n, WalkContext context, WalkContext typeContext, CAstVisitor visitor) { return !defineType(n, (WalkContext) context); } + @Override protected void leaveTypeEntity(CAstEntity n, WalkContext context, WalkContext typeContext, CAstVisitor visitor) { /* empty */ } + @Override protected boolean visitFunctionEntity(CAstEntity n, WalkContext context, WalkContext codeContext, CAstVisitor visitor) { if (n.getAST() == null) // presumably abstract declareFunction(n, (WalkContext) context); @@ -2867,21 +3068,25 @@ public abstract class AstTranslator extends CAstVisitor visitor) { if (n.getAST() != null) // non-abstract closeFunctionEntity(n, (WalkContext) context, (WalkContext) codeContext); } + @Override protected boolean visitMacroEntity(CAstEntity n, WalkContext context, WalkContext codeContext, CAstVisitor visitor) { return true; } + @Override protected boolean visitScriptEntity(CAstEntity n, WalkContext context, WalkContext codeContext, CAstVisitor visitor) { declareFunction(n, (WalkContext) codeContext); initFunctionEntity(n, (WalkContext) context, (WalkContext) codeContext); return false; } + @Override protected void leaveScriptEntity(CAstEntity n, WalkContext context, WalkContext codeContext, CAstVisitor visitor) { closeFunctionEntity(n, (WalkContext) context, (WalkContext) codeContext); } @@ -2928,10 +3133,12 @@ public abstract class AstTranslator extends CAstVisitor visitor) { // here, n represents the "finally" block of the unwind return new UnwindContext(n, (WalkContext) context, visitor); @@ -2947,19 +3154,23 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveFunctionExpr(CAstNode n, WalkContext c, CAstVisitor visitor) { int result = processFunctionExpr(n, c); c.setValue(n, result); } + @Override protected boolean visitFunctionStmt(CAstNode n, WalkContext c, CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveFunctionStmt(CAstNode n, WalkContext context, CAstVisitor visitor) { int result = processFunctionExpr(n, context); CAstEntity fn = (CAstEntity) n.getChild(0).getValue(); @@ -2977,29 +3188,36 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveLocalScope(CAstNode n, WalkContext c, CAstVisitor visitor) { c.setValue(n, c.getValue(n.getChild(0))); } + @Override protected boolean visitBlockExpr(CAstNode n, WalkContext c, CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveBlockExpr(CAstNode n, WalkContext c, CAstVisitor visitor) { c.setValue(n, c.getValue(n.getChild(n.getChildCount() - 1))); } + @Override protected boolean visitBlockStmt(CAstNode n, WalkContext c, CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveBlockStmt(CAstNode n, WalkContext c, CAstVisitor visitor) { /* empty */ } + @Override protected boolean visitLoop(CAstNode n, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; // loop test block @@ -3034,16 +3252,20 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ } + @Override protected final void leaveLoop(CAstNode n, WalkContext c, CAstVisitor visitor) { /* empty */ } + @Override protected boolean visitGetCaughtException(CAstNode n, WalkContext c, CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveGetCaughtException(CAstNode n, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; String nm = (String) n.getChild(0).getValue(); @@ -3053,22 +3275,27 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveThis(CAstNode n, WalkContext c, CAstVisitor visitor) { c.setValue(n, 1); } + @Override protected boolean visitSuper(CAstNode n, WalkContext c, CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveSuper(CAstNode n, WalkContext c, CAstVisitor visitor) { c.setValue(n, 1); } + @Override protected boolean visitCall(CAstNode n, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; int result = context.currentScope().allocateTempValue(); @@ -3076,6 +3303,7 @@ public abstract class AstTranslator extends CAstVisitor visitor) { WalkContext context = (WalkContext) c; int result = c.getValue(n); @@ -3089,10 +3317,12 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveVar(CAstNode n, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; String nm = (String) n.getChild(0).getValue(); @@ -3108,15 +3338,18 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveConstant(CAstNode n, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; c.setValue(n, context.currentScope().getConstantValue(n.getValue())); } + @Override protected boolean visitBinaryExpr(CAstNode n, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; int result = context.currentScope().allocateTempValue(); @@ -3146,6 +3379,7 @@ public abstract class AstTranslator extends CAstVisitor visitor) { WalkContext context = (WalkContext) c; int result = c.getValue(n); @@ -3165,6 +3399,7 @@ public abstract class AstTranslator extends CAstVisitor visitor) { WalkContext context = (WalkContext) c; int result = context.currentScope().allocateTempValue(); @@ -3172,6 +3407,7 @@ public abstract class AstTranslator extends CAstVisitor visitor) { WalkContext context = (WalkContext) c; int result = c.getValue(n); @@ -3179,6 +3415,7 @@ public abstract class AstTranslator extends CAstVisitor visitor) { WalkContext context = (WalkContext) c; int result = context.currentScope().allocateTempValue(); @@ -3186,6 +3423,7 @@ public abstract class AstTranslator extends CAstVisitor visitor) { WalkContext context = (WalkContext) c; int result = c.getValue(n); @@ -3193,10 +3431,12 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveArrayRef(CAstNode n, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; int arrayValue = c.getValue(n.getChild(0)); @@ -3205,11 +3445,13 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ return false; } // TODO: should we handle exploded declaration nodes here instead? + @Override protected void leaveDeclStmt(CAstNode n, WalkContext c, CAstVisitor visitor) { CAstSymbol s = (CAstSymbol) n.getChild(0).getValue(); String nm = s.name(); @@ -3230,10 +3472,12 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveReturn(CAstNode n, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; if (n.getChildCount() > 0) { @@ -3247,10 +3491,12 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveIfgoto(CAstNode n, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; if (n.getChildCount() == 1) { @@ -3270,10 +3516,12 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveGoto(CAstNode n, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; if (!context.cfg().isDeadBlock(context.cfg().getCurrentBlock())) { @@ -3288,6 +3536,7 @@ public abstract class AstTranslator extends CAstVisitor visitor) { WalkContext context = (WalkContext) c; if (!context.getControlFlow().getSourceNodes(n).isEmpty()) { @@ -3297,6 +3546,7 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ } @@ -3344,29 +3594,37 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ } + @Override protected final void leaveIfStmtTrueClause(CAstNode n, WalkContext c, CAstVisitor visitor) { /* empty */ } + @Override protected final void leaveIfStmt(CAstNode n, WalkContext c, CAstVisitor visitor) { /* empty */ } + @Override protected final void leaveIfExprCondition(CAstNode n, WalkContext c, CAstVisitor visitor) { /* empty */ } + @Override protected final void leaveIfExprTrueClause(CAstNode n, WalkContext c, CAstVisitor visitor) { /* empty */ } + @Override protected final void leaveIfExpr(CAstNode n, WalkContext c, CAstVisitor visitor) { /* empty */ } + @Override protected boolean visitIfStmt(CAstNode n, WalkContext c, CAstVisitor visitor) { processIf(n, false, c, visitor); return true; } + @Override protected boolean visitIfExpr(CAstNode n, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; int result = context.currentScope().allocateTempValue(); @@ -3375,10 +3633,12 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveNew(CAstNode n, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; @@ -3397,10 +3657,12 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveObjectLiteralFieldInit(CAstNode n, int i, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; if (n.getChild(i).getKind() == CAstNode.EMPTY) { @@ -3409,27 +3671,33 @@ public abstract class AstTranslator extends CAstVisitor visitor) { c.setValue(n, c.getValue(n.getChild(0))); } + @Override protected boolean visitArrayLiteral(CAstNode n, WalkContext c, CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveArrayLiteralObject(CAstNode n, WalkContext c, CAstVisitor visitor) { c.setValue(n, c.getValue(n.getChild(0))); } + @Override protected void leaveArrayLiteralInitElement(CAstNode n, int i, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; arrayOpHandler.doArrayWrite(context, c.getValue(n.getChild(0)), n, new int[] { context.currentScope().getConstantValue(new Integer(i - 1)) }, c.getValue(n.getChild(i))); } + @Override protected void leaveArrayLiteral(CAstNode n, WalkContext c, CAstVisitor visitor) { /* empty */ } + @Override protected boolean visitObjectRef(CAstNode n, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; int result = context.currentScope().allocateTempValue(); @@ -3437,6 +3705,7 @@ public abstract class AstTranslator extends CAstVisitor visitor) { WalkContext context = (WalkContext) c; int result = c.getValue(n); @@ -3444,10 +3713,12 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ return false; } + @Override public void leaveAssign(CAstNode n, WalkContext c, CAstVisitor visitor) { if (n.getKind() == CAstNode.ASSIGN) { c.setValue(n, c.getValue(n.getChild(1))); @@ -3483,10 +3754,12 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveArrayRefAssign(CAstNode n, CAstNode v, CAstNode a, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; int rval = c.getValue(v); @@ -3494,10 +3767,12 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveArrayRefAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; int temp = context.currentScope().allocateTempValue(); @@ -3508,10 +3783,12 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveObjectRefAssign(CAstNode n, CAstNode v, CAstNode a, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; int rval = c.getValue(v); @@ -3522,10 +3799,12 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveObjectRefAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; int temp = context.currentScope().allocateTempValue(); @@ -3535,22 +3814,27 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveBlockExprAssign(CAstNode n, CAstNode v, CAstNode a, WalkContext c, CAstVisitor visitor) { c.setValue(n, c.getValue(n.getChild(n.getChildCount() - 1))); } + @Override protected boolean visitBlockExprAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, WalkContext c, CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveBlockExprAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, WalkContext c, CAstVisitor visitor) { /* empty */ c.setValue(n, c.getValue(n.getChild(n.getChildCount() - 1))); } + @Override protected boolean visitVarAssign(CAstNode n, CAstNode v, CAstNode a, WalkContext c, CAstVisitor visitor) { /* empty */ return false; } @@ -3569,6 +3853,7 @@ public abstract class AstTranslator extends CAstVisitor visitor) { WalkContext context = (WalkContext) c; int rval = c.getValue(v); @@ -3578,10 +3863,12 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveVarAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; String nm = (String) n.getChild(0).getValue(); @@ -3745,6 +4032,7 @@ public abstract class AstTranslator extends CAstVisitor visitor) { WalkContext context = (WalkContext) c; if (isSimpleSwitch(n, context, visitor)) { @@ -3756,16 +4044,20 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ } + @Override protected final void leaveSwitch(CAstNode n, WalkContext c, CAstVisitor visitor) { /* empty */ } + @Override protected boolean visitThrow(CAstNode n, WalkContext c, CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveThrow(CAstNode n, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; doThrow(context, c.getValue(n.getChild(0))); @@ -3784,6 +4076,7 @@ public abstract class AstTranslator extends CAstVisitor visitor) { WalkContext context = (WalkContext) c; @@ -3814,13 +4107,16 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ } + @Override protected boolean visitUnwind(CAstNode n, WalkContext c, CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveUnwind(CAstNode n, WalkContext c, CAstVisitor visitor) { /* empty */ } @@ -3838,6 +4134,7 @@ public abstract class AstTranslator extends CAstVisitor visitor) { final WalkContext context = (WalkContext) c; boolean addSkipCatchGoto = false; @@ -3877,25 +4174,31 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ } + @Override protected final void leaveTry(CAstNode n, WalkContext c, CAstVisitor visitor) { /* empty */ } + @Override protected boolean visitEmpty(CAstNode n, WalkContext c, CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveEmpty(CAstNode n, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; c.setValue(n, context.currentScope().getConstantValue(null)); } + @Override protected boolean visitPrimitive(CAstNode n, WalkContext c, CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leavePrimitive(CAstNode n, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; int result = context.currentScope().allocateTempValue(); @@ -3904,18 +4207,22 @@ public abstract class AstTranslator extends CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveVoid(CAstNode n, WalkContext c, CAstVisitor visitor) { c.setValue(n, -1); } + @Override protected boolean visitAssert(CAstNode n, WalkContext c, CAstVisitor visitor) { /* empty */ return false; } + @Override protected void leaveAssert(CAstNode n, WalkContext c, CAstVisitor visitor) { WalkContext context = (WalkContext) c; boolean fromSpec = true; @@ -3928,16 +4235,19 @@ public abstract class AstTranslator extends CAstVisitor visitor) { return false; } + @Override protected void leaveEachElementGet(CAstNode n, WalkContext c, CAstVisitor visitor) { int result = ((WalkContext) c).currentScope().allocateTempValue(); c.setValue(n, result); ((WalkContext) c).cfg().addInstruction(new EachElementGetInstruction(result, c.getValue(n.getChild(0)))); } + @Override protected boolean visitEachElementHasNext(CAstNode n, WalkContext c, CAstVisitor visitor) { return false; } @@ -3949,10 +4259,12 @@ public abstract class AstTranslator extends CAstVisitor visitor) { return false; } + @Override protected void leaveTypeLiteralExpr(CAstNode n, WalkContext c, CAstVisitor visitor) { WalkContext wc = (WalkContext) c; assert n.getChild(0).getKind() == CAstNode.CONSTANT; @@ -3966,10 +4278,12 @@ public abstract class AstTranslator extends CAstVisitor visitor) { return false; } + @Override protected void leaveIsDefinedExpr(CAstNode n, WalkContext c, CAstVisitor visitor) { WalkContext wc = (WalkContext) c; int ref = c.getValue(n.getChild(0)); @@ -3982,10 +4296,12 @@ public abstract class AstTranslator extends CAstVisitor visitor) { return false; } + @Override protected void leaveEcho(CAstNode n, WalkContext c, CAstVisitor visitor) { WalkContext wc = (WalkContext) c; @@ -4006,6 +4322,7 @@ public abstract class AstTranslator extends CAstVisitor visitor) { WalkContext wc = (WalkContext) c; @@ -4037,6 +4354,7 @@ public abstract class AstTranslator extends CAstVisitor, CAstNode> nodeMap) { if (isMacroExpansion && root.getKind() == CAstNode.MACRO_VAR) { int arg = ((Number) root.getChild(0).getValue()).intValue(); @@ -4054,10 +4372,12 @@ public abstract class AstTranslator extends CAstVisitor entityScopes() { return Collections.singleton(globalScope); } + @Override public CAstSourcePositionMap getSourceMap() { return N.getSourceMap(); } + @Override public CAstControlFlowMap getControlFlow() { return N.getControlFlow(); } + @Override public IncipientCFG cfg() { return null; } + @Override public UnwindState getUnwindState() { return null; } + @Override public String getName() { return null; } + @Override public void setCatchType(IBasicBlock bb, TypeReference catchType) { } + @Override public void setCatchType(CAstNode castNode, TypeReference catchType) { } + @Override public Map getCatchTypes() { return null; } + @Override public void addEntityName(CAstEntity e, String name) { entityNames.put(e, name); } + @Override public String getEntityName(CAstEntity e) { if (e == null) { return null; @@ -4150,31 +4485,37 @@ public abstract class AstTranslator extends CAstVisitor, Integer>> exposeNameSet(CAstEntity entity, boolean writeSet) { assert false; return null; } + @Override public Set getAccesses(CAstEntity e) { assert false; return null; } + @Override public Scope getGlobalScope(){ return globalScope; } @@ -4184,6 +4525,7 @@ public abstract class AstTranslator extends CAstVisitor, T> implements WalkContext { + @Override public Map> getScopedEntities() { assert false; return Collections.emptyMap(); } + @Override public void addScopedEntity(CAstNode newNode, CAstEntity visit) { assert false; } + @Override public CAstControlFlowRecorder cfg() { assert false; return null; } + @Override public CAstSourcePositionRecorder pos() { assert false; return null; } + @Override public CAstNodeTypeMapRecorder getNodeTypeMap() { assert false; return null; } + @Override public T getContinueFor(String label) { assert false; return null; } + @Override public T getBreakFor(String label) { assert false; return null; @@ -128,30 +135,37 @@ public interface TranslatorToCAst { this.parent = parent; } + @Override public CAstControlFlowRecorder cfg() { return parent.cfg(); } + @Override public CAstSourcePositionRecorder pos() { return parent.pos(); } + @Override public CAstNodeTypeMapRecorder getNodeTypeMap() { return parent.getNodeTypeMap(); } + @Override public T getContinueFor(String label) { return parent.getContinueFor(label); } + @Override public T getBreakFor(String label) { return parent.getBreakFor(label); } + @Override public void addScopedEntity(CAstNode newNode, CAstEntity visit) { parent.addScopedEntity(newNode, visit); } + @Override public Map> getScopedEntities() { return parent.getScopedEntities(); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstClass.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstClass.java index cf2bad852..dc09677e0 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstClass.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstClass.java @@ -56,30 +56,37 @@ abstract public class AstClass implements IClass, ClassConstants { this.typeReference = TypeReference.findOrCreate(loader.getReference(), typeName); } + @Override public boolean isInterface() { return (modifiers & ACC_INTERFACE) != 0; } + @Override public boolean isAbstract() { return (modifiers & ACC_ABSTRACT) != 0; } + @Override public boolean isPublic() { return (modifiers & ACC_PUBLIC) != 0; } + @Override public boolean isPrivate() { return (modifiers & ACC_PRIVATE) != 0; } + @Override public boolean isReferenceType() { return true; } + @Override public boolean isArrayClass() { return false; } + @Override public int getModifiers() { return modifiers; } @@ -92,26 +99,32 @@ abstract public class AstClass implements IClass, ClassConstants { return sourcePosition.getURL(); } + @Override public String getSourceFileName() { return sourcePosition.getURL().getFile(); } + @Override public InputStream getSource() { return null; } + @Override public TypeName getName() { return typeName; } + @Override public TypeReference getReference() { return typeReference; } + @Override public IClassLoader getClassLoader() { return loader; } + @Override public abstract IClass getSuperclass(); private Collection gatherInterfaces() { @@ -123,16 +136,20 @@ abstract public class AstClass implements IClass, ClassConstants { return result; } + @Override public abstract Collection getDirectInterfaces(); + @Override public Collection getAllImplementedInterfaces() { return gatherInterfaces(); } + @Override public IMethod getClassInitializer() { return getMethod(MethodReference.clinitSelector); } + @Override public IMethod getMethod(Selector selector) { if (declaredMethods.containsKey(selector)) { return declaredMethods.get(selector); @@ -143,6 +160,7 @@ abstract public class AstClass implements IClass, ClassConstants { } } + @Override public IField getField(Atom name) { if (declaredFields.containsKey(name)) { return declaredFields.get(name); @@ -153,14 +171,17 @@ abstract public class AstClass implements IClass, ClassConstants { } } + @Override public IField getField(Atom name, TypeName type) { // assume that for AST classes, you can't have multiple fields with the same name return getField(name); } + @Override public Collection getDeclaredMethods() { return declaredMethods.values(); } + @Override public Collection getDeclaredInstanceFields() { Set result = HashSetFactory.make(); for (Iterator FS = declaredFields.values().iterator(); FS.hasNext();) { @@ -173,6 +194,7 @@ abstract public class AstClass implements IClass, ClassConstants { return result; } + @Override public Collection getDeclaredStaticFields() { Set result = HashSetFactory.make(); for (Iterator FS = declaredFields.values().iterator(); FS.hasNext();) { @@ -185,6 +207,7 @@ abstract public class AstClass implements IClass, ClassConstants { return result; } + @Override public Collection getAllInstanceFields() { Collection result = HashSetFactory.make(); result.addAll(getDeclaredInstanceFields()); @@ -195,6 +218,7 @@ abstract public class AstClass implements IClass, ClassConstants { return result; } + @Override public Collection getAllStaticFields() { Collection result = HashSetFactory.make(); result.addAll(getDeclaredStaticFields()); @@ -205,6 +229,7 @@ abstract public class AstClass implements IClass, ClassConstants { return result; } + @Override public Collection getAllFields() { Collection result = HashSetFactory.make(); result.addAll(getAllInstanceFields()); @@ -212,6 +237,7 @@ abstract public class AstClass implements IClass, ClassConstants { return result; } + @Override public Collection getAllMethods() { Collection result = HashSetFactory.make(); for (Iterator ms = getDeclaredMethods().iterator(); ms.hasNext();) { diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstDynamicPropertyClass.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstDynamicPropertyClass.java index 91093f3cb..1b3b5c1aa 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstDynamicPropertyClass.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstDynamicPropertyClass.java @@ -37,6 +37,7 @@ public abstract class AstDynamicPropertyClass extends AstClass { this.defaultDescriptor = defaultDescriptor; } + @Override public IField getField(final Atom name) { if (declaredFields.containsKey(name)) { return declaredFields.get(name); @@ -45,54 +46,67 @@ public abstract class AstDynamicPropertyClass extends AstClass { } else { final boolean isStatic = isStaticField(name); declaredFields.put(name, new IField() { + @Override public String toString() { return ""; } + @Override public IClass getDeclaringClass() { return AstDynamicPropertyClass.this; } + @Override public Atom getName() { return name; } + @Override public TypeReference getFieldTypeReference() { return defaultDescriptor; } + @Override public FieldReference getReference() { return FieldReference.findOrCreate(AstDynamicPropertyClass.this.getReference(), name, defaultDescriptor); } + @Override public boolean isFinal() { return false; } + @Override public boolean isPrivate() { return false; } + @Override public boolean isProtected() { return false; } + @Override public boolean isPublic() { return false; } + @Override public boolean isVolatile() { return false; } + @Override public boolean isStatic() { return isStatic; } + @Override public IClassHierarchy getClassHierarchy() { return AstDynamicPropertyClass.this.getClassHierarchy(); } + @Override public Collection getAnnotations() { return Collections.emptySet(); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstField.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstField.java index 65fd4a827..ce723f35e 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstField.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstField.java @@ -43,54 +43,67 @@ public class AstField implements IField { } + @Override public Collection getAnnotations() { return annotations; } + @Override public IClass getDeclaringClass() { return declaringClass; } + @Override public String toString() { return "field " + ref.getName(); } + @Override public Atom getName() { return ref.getName(); } + @Override public TypeReference getFieldTypeReference() { return ref.getFieldType(); } + @Override public FieldReference getReference() { return ref; } + @Override public boolean isStatic() { return qualifiers.contains(CAstQualifier.STATIC); } + @Override public boolean isFinal() { return qualifiers.contains(CAstQualifier.CONST) || qualifiers.contains(CAstQualifier.FINAL); } + @Override public boolean isPrivate() { return qualifiers.contains(CAstQualifier.PRIVATE); } + @Override public boolean isProtected() { return qualifiers.contains(CAstQualifier.PROTECTED); } + @Override public boolean isPublic() { return qualifiers.contains(CAstQualifier.PUBLIC); } + @Override public boolean isVolatile() { return qualifiers.contains(CAstQualifier.VOLATILE); } + @Override public IClassHierarchy getClassHierarchy() { return cha; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstFunctionClass.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstFunctionClass.java index 713651a9a..8cbbf15aa 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstFunctionClass.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstFunctionClass.java @@ -53,6 +53,7 @@ abstract public class AstFunctionClass implements IClass, ClassConstants { sourcePosition); } + @Override public String toString() { try { return "function " + functionBody.getReference().getDeclaringClass().getName(); @@ -61,22 +62,27 @@ abstract public class AstFunctionClass implements IClass, ClassConstants { } } + @Override public IClassLoader getClassLoader() { return loader; } + @Override public boolean isInterface() { return false; } + @Override public boolean isAbstract() { return functionBody == null; } + @Override public boolean isPublic() { return true; } + @Override public boolean isPrivate() { return false; } @@ -85,18 +91,22 @@ abstract public class AstFunctionClass implements IClass, ClassConstants { return false; } + @Override public int getModifiers() { return ACC_PUBLIC; } + @Override public IClass getSuperclass() { return loader.lookupClass(superReference.getName()); } + @Override public Collection getDirectInterfaces() { return Collections.emptySet(); } + @Override public Collection getAllImplementedInterfaces() { return Collections.emptySet(); } @@ -105,6 +115,7 @@ abstract public class AstFunctionClass implements IClass, ClassConstants { return Collections.emptySet(); } + @Override public IMethod getMethod(Selector selector) { if (selector.equals(AstMethodReference.fnSelector)) { return functionBody; @@ -113,15 +124,18 @@ abstract public class AstFunctionClass implements IClass, ClassConstants { } } + @Override public IField getField(Atom name) { return loader.lookupClass(superReference.getName()).getField(name); } + @Override public IField getField(Atom name, TypeName type) { // assume that for AST classes, you can't have multiple fields with the same name return loader.lookupClass(superReference.getName()).getField(name); } + @Override public TypeReference getReference() { return reference; } @@ -134,22 +148,27 @@ abstract public class AstFunctionClass implements IClass, ClassConstants { return sourcePosition.getURL(); } + @Override public String getSourceFileName() { return sourcePosition.getURL().getFile(); } + @Override public InputStream getSource() { return null; } + @Override public IMethod getClassInitializer() { return null; } + @Override public boolean isArrayClass() { return false; } + @Override public Collection getDeclaredMethods() { if (functionBody != null) { return Collections.singleton(functionBody); @@ -158,34 +177,42 @@ abstract public class AstFunctionClass implements IClass, ClassConstants { } } + @Override public Collection getDeclaredInstanceFields() { return Collections.emptySet(); } + @Override public Collection getDeclaredStaticFields() { return Collections.emptySet(); } + @Override public Collection getAllInstanceFields() { return Collections.emptySet(); } + @Override public Collection getAllStaticFields() { return Collections.emptySet(); } + @Override public Collection getAllFields() { return Collections.emptySet(); } + @Override public Collection getAllMethods() { return Collections.singleton(functionBody); } + @Override public TypeName getName() { return reference.getName(); } + @Override public boolean isReferenceType() { return true; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstMethod.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstMethod.java index 65dd81776..96930b887 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstMethod.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstMethod.java @@ -173,6 +173,7 @@ public abstract class AstMethod implements IMethod { return debugInfo; } + @Override public Collection getAnnotations() { return annotations; } @@ -186,10 +187,12 @@ public abstract class AstMethod implements IMethod { public abstract AstMethod getMethod(); + @Override public int hashCode() { return getName().hashCode() * getMethod().hashCode(); } + @Override public boolean equals(Object o) { return (o instanceof LexicalParent) && getName().equals(((LexicalParent) o).getName()) && getMethod().equals(((LexicalParent) o).getMethod()); @@ -198,78 +201,97 @@ public abstract class AstMethod implements IMethod { public abstract LexicalParent[] getParents(); + @Override public IClass getDeclaringClass() { return cls; } + @Override public String getSignature() { return ref.getSignature(); } + @Override public Selector getSelector() { return ref.getSelector(); } + @Override public boolean isClinit() { return getSelector().equals(MethodReference.clinitSelector); } + @Override public boolean isInit() { return getSelector().getName().equals(MethodReference.initAtom); } + @Override public Atom getName() { return ref.getName(); } + @Override public Descriptor getDescriptor() { return ref.getDescriptor(); } + @Override public MethodReference getReference() { return ref; } + @Override public TypeReference getReturnType() { return ref.getReturnType(); } + @Override public boolean isStatic() { return qualifiers.contains(CAstQualifier.STATIC); } + @Override public boolean isSynchronized() { return qualifiers.contains(CAstQualifier.SYNCHRONIZED); } + @Override public boolean isNative() { return qualifiers.contains(CAstQualifier.NATIVE); } + @Override public boolean isSynthetic() { return false; } + @Override public boolean isAbstract() { return qualifiers.contains(CAstQualifier.ABSTRACT); } + @Override public boolean isPrivate() { return qualifiers.contains(CAstQualifier.PRIVATE); } + @Override public boolean isProtected() { return qualifiers.contains(CAstQualifier.PROTECTED); } + @Override public boolean isPublic() { return qualifiers.contains(CAstQualifier.PUBLIC); } + @Override public boolean isFinal() { return qualifiers.contains(CAstQualifier.FINAL); } + @Override public boolean isBridge() { return qualifiers.contains(CAstQualifier.VOLATILE); } @@ -278,6 +300,7 @@ public abstract class AstMethod implements IMethod { return cfg; } + @Override public boolean hasExceptionHandler() { return hasCatchBlock; } @@ -286,10 +309,12 @@ public abstract class AstMethod implements IMethod { return hasMonitorOp; } + @Override public int getNumberOfParameters() { return symtab.getParameterValueNumbers().length; } + @Override public int getLineNumber(int instructionIndex) { Position pos = debugInfo.getInstructionPosition(instructionIndex); if (pos == null) { diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractLoader.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractLoader.java index d7de02e65..1c80e6fb3 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractLoader.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractLoader.java @@ -75,6 +75,7 @@ public abstract class CAstAbstractLoader implements IClassLoader { private Iterator getMessages(final byte severity) { return new MapIterator>, ModuleEntry>(new FilterIterator>>(errors.entrySet().iterator(), new Filter>>() { + @Override public boolean accepts(Entry> o) { for(Warning w : o.getValue()) { if (w.getLevel() == severity) { @@ -84,6 +85,7 @@ public abstract class CAstAbstractLoader implements IClassLoader { return false; } }), new Function>, ModuleEntry>() { + @Override public ModuleEntry apply(Entry> object) { return object.getKey(); } @@ -112,22 +114,27 @@ public abstract class CAstAbstractLoader implements IClassLoader { return (IClass) types.get(TypeName.string2TypeName(className)); } + @Override public IClass lookupClass(TypeName className) { return (IClass) types.get(className); } + @Override public Iterator iterateAllClasses() { return types.values().iterator(); } + @Override public int getNumberOfClasses() { return types.size(); } + @Override public Atom getName() { return getReference().getName(); } + @Override public int getNumberOfMethods() { int i = 0; for (Iterator cls = types.values().iterator(); cls.hasNext();) { @@ -142,6 +149,7 @@ public abstract class CAstAbstractLoader implements IClassLoader { return i; } + @Override public String getSourceFileName(IMethod method, int bcOffset) { if (!(method instanceof AstMethod)){ return null; @@ -153,10 +161,12 @@ public abstract class CAstAbstractLoader implements IClassLoader { return pos.getURL().getFile(); } + @Override public String getSourceFileName(IClass klass) { return ((AstClass)klass).getSourcePosition().getURL().getFile(); } + @Override public InputStream getSource(IClass klass) { try { return ((AstClass)klass).getSourcePosition().getInputStream(); @@ -165,6 +175,7 @@ public abstract class CAstAbstractLoader implements IClassLoader { } } + @Override public InputStream getSource(IMethod method, int bcOffset) { try { return ((AstMethod)method).getSourcePosition(bcOffset).getInputStream(); @@ -173,11 +184,13 @@ public abstract class CAstAbstractLoader implements IClassLoader { } } + @Override public IClassLoader getParent() { assert parent != null; return parent; } + @Override public void removeAll(Collection toRemove) { Set keys = HashSetFactory.make(); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractModuleLoader.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractModuleLoader.java index 72bfe78e9..68d0f23cc 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractModuleLoader.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractModuleLoader.java @@ -91,6 +91,7 @@ public abstract class CAstAbstractModuleLoader extends CAstAbstractLoader { } + @Override public void init(final List modules) { final CAst ast = new CAstImpl(); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/SingleClassLoaderFactory.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/SingleClassLoaderFactory.java index 04a3dfb62..052eea4d6 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/SingleClassLoaderFactory.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/SingleClassLoaderFactory.java @@ -28,6 +28,7 @@ public abstract class SingleClassLoaderFactory implements ClassLoaderFactory { */ private IClassLoader THE_LOADER = null; + @Override public IClassLoader getLoader(ClassLoaderReference classLoaderReference, IClassHierarchy cha, AnalysisScope scope) { if (THE_LOADER == null) { THE_LOADER = makeTheLoader(cha); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/plugin/AstPlugin.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/plugin/AstPlugin.java index 8dacb26f3..0cc43fd3a 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/plugin/AstPlugin.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/plugin/AstPlugin.java @@ -31,14 +31,16 @@ public class AstPlugin extends Plugin { /** * This method is called upon plug-in activation */ - public void start(BundleContext context) throws Exception { + @Override + public void start(BundleContext context) throws Exception { super.start(context); } /** * This method is called when the plug-in is stopped */ - public void stop(BundleContext context) throws Exception { + @Override + public void stop(BundleContext context) throws Exception { super.stop(context); plugin = null; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/AstPlugin.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/AstPlugin.java index 2e032360e..03b34d7ba 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/AstPlugin.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/AstPlugin.java @@ -31,14 +31,16 @@ public class AstPlugin extends Plugin { /** * This method is called upon plug-in activation */ - public void start(BundleContext context) throws Exception { + @Override + public void start(BundleContext context) throws Exception { super.start(context); } /** * This method is called when the plug-in is stopped */ - public void stop(BundleContext context) throws Exception { + @Override + public void stop(BundleContext context) throws Exception { super.stop(context); plugin = null; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstControlFlowMap.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstControlFlowMap.java index a5475112f..fb4919e8e 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstControlFlowMap.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstControlFlowMap.java @@ -39,31 +39,38 @@ public interface CAstControlFlowMap { * uncaught exception. */ public static final CAstNode EXCEPTION_TO_EXIT = new CAstNode() { + @Override public int getKind() { return CAstNode.CONSTANT; } + @Override public Object getValue() { return this; } + @Override public CAstNode getChild(int n) { Assertions.UNREACHABLE(); return null; } + @Override public int getChildCount() { return 0; } + @Override public String toString() { return "EXCEPTION_TO_EXIT"; } + @Override public int hashCode() { return getKind() * toString().hashCode(); } + @Override public boolean equals(Object o) { return o == this; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstMemberReference.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstMemberReference.java index 3ea0d471b..986cede81 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstMemberReference.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstMemberReference.java @@ -14,22 +14,27 @@ public interface CAstMemberReference extends CAstReference { public static final CAstMemberReference FUNCTION = new CAstMemberReference() { + @Override public String member() { return "the function body"; } + @Override public CAstType type() { return null; } + @Override public String toString() { return "Any::FUNCTION CALL"; } + @Override public int hashCode() { return toString().hashCode(); } + @Override public boolean equals(Object o) { return o == this; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstQualifier.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstQualifier.java index d7aff3a11..3fd850bb4 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstQualifier.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstQualifier.java @@ -73,6 +73,7 @@ public class CAstQualifier { return fName; } + @Override public boolean equals(Object o) { if (!(o instanceof CAstQualifier)) return false; @@ -80,6 +81,7 @@ public class CAstQualifier { return other.fName.equals(fName) && (fBit == other.fBit); } + @Override public int hashCode() { int result = 37; result = result * 13 + fName.hashCode(); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstSymbol.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstSymbol.java index b212664e9..1f711ae53 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstSymbol.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstSymbol.java @@ -13,6 +13,7 @@ package com.ibm.wala.cast.tree; public interface CAstSymbol { public static Object NULL_DEFAULT_VALUE = new Object() { + @Override public String toString() { return "NULL DEFAULT VALUE"; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstType.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstType.java index 783d1b165..8fccb0d86 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstType.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstType.java @@ -64,10 +64,12 @@ public interface CAstType { public static final CAstType DYNAMIC = new CAstType() { + @Override public String getName() { return "DYNAMIC"; } + @Override public Collection/**/ getSupertypes() { return Collections.EMPTY_SET; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstTypeDictionary.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstTypeDictionary.java index e784f49ca..a744d931a 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstTypeDictionary.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/CAstTypeDictionary.java @@ -21,6 +21,7 @@ public interface CAstTypeDictionary/**/ extends Iterable { CAstReference resolveReference(CAstReference ref); + @Override Iterator iterator(); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/AbstractSourcePosition.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/AbstractSourcePosition.java index 9361ab196..350523a44 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/AbstractSourcePosition.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/AbstractSourcePosition.java @@ -16,6 +16,7 @@ import com.ibm.wala.cast.tree.CAstSourcePositionMap.Position; public abstract class AbstractSourcePosition implements Position { + @Override public boolean equals(Object o){ if (o instanceof Position) { Position p = (Position)o; @@ -33,10 +34,12 @@ public abstract class AbstractSourcePosition implements Position { } } + @Override public int hashCode() { return getFirstLine()*getLastLine()*getFirstCol()*getLastCol(); } + @Override public int compareTo(Object o) { if (o instanceof Position) { Position p = (Position)o; @@ -54,6 +57,7 @@ public abstract class AbstractSourcePosition implements Position { } } + @Override public String toString() { URL x = getURL(); String xf = x.toString(); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstControlFlowRecorder.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstControlFlowRecorder.java index 6414f7872..be9787708 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstControlFlowRecorder.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstControlFlowRecorder.java @@ -67,6 +67,7 @@ public class CAstControlFlowRecorder implements CAstControlFlowMap { this.label = label; } + @Override public int hashCode() { if (label != null) return from.hashCode() * label.hashCode(); @@ -74,11 +75,13 @@ public class CAstControlFlowRecorder implements CAstControlFlowMap { return from.hashCode(); } + @Override public boolean equals(Object o) { return (o instanceof Key) && from == ((Key) o).from && ((label == null) ? ((Key) o).label == null : label.equals(((Key) o).label)); } + @Override public String toString() { return ""; } @@ -89,6 +92,7 @@ public class CAstControlFlowRecorder implements CAstControlFlowMap { map(EXCEPTION_TO_EXIT, EXCEPTION_TO_EXIT); } + @Override public CAstNode getTarget(CAstNode from, Object label) { assert CAstToNode.get(from) != null; Key key = new Key(label, CAstToNode.get(from)); @@ -100,6 +104,7 @@ public class CAstControlFlowRecorder implements CAstControlFlowMap { return null; } + @Override public Collection getTargetLabels(CAstNode from) { if (labelMap.containsKey(CAstToNode.get(from))) { return labelMap.get(CAstToNode.get(from)); @@ -108,6 +113,7 @@ public class CAstControlFlowRecorder implements CAstControlFlowMap { } } + @Override public Collection getSourceNodes(CAstNode to) { if (sourceMap.containsKey(CAstToNode.get(to))) { return (Set) sourceMap.get(CAstToNode.get(to)); @@ -116,6 +122,7 @@ public class CAstControlFlowRecorder implements CAstControlFlowMap { } } + @Override public Collection getMappedNodes() { Collection nodes = cachedMappedNodes; if (nodes == null) { @@ -192,6 +199,7 @@ public class CAstControlFlowRecorder implements CAstControlFlowMap { return nodeToCAst.containsKey(node); } + @Override public String toString() { StringBuffer sb = new StringBuffer("control flow map\n"); for (Iterator keys = table.keySet().iterator(); keys.hasNext();) { diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstImpl.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstImpl.java index 775138f95..13da32d82 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstImpl.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstImpl.java @@ -27,6 +27,7 @@ import com.ibm.wala.cast.util.CAstPrinter; public class CAstImpl implements CAst { private int nextID = 0; + @Override public String makeUnique() { return "id" + (nextID++); } @@ -45,14 +46,17 @@ public class CAstImpl implements CAst { + "]"; } + @Override public int getKind() { return kind; } + @Override public Object getValue() { return null; } + @Override public CAstNode getChild(int n) { try { return cs[n]; @@ -61,14 +65,17 @@ public class CAstImpl implements CAst { } } + @Override public int getChildCount() { return cs.length; } + @Override public String toString() { return System.identityHashCode(this) + ":" + CAstPrinter.print(this); } + @Override public int hashCode() { int code = getKind() * (getChildCount() + 13); for (int i = 0; i < getChildCount(); i++) { @@ -79,10 +86,12 @@ public class CAstImpl implements CAst { } } + @Override public CAstNode makeNode(final int kind, final CAstNode[] cs) { return new CAstNodeImpl(kind, cs); } + @Override public CAstNode makeNode(int kind, CAstNode c1, CAstNode[] cs) { CAstNode[] children = new CAstNode[cs.length + 1]; children[0] = c1; @@ -90,30 +99,37 @@ public class CAstImpl implements CAst { return makeNode(kind, children); } + @Override public CAstNode makeNode(int kind) { return makeNode(kind, new CAstNode[0]); } + @Override public CAstNode makeNode(int kind, CAstNode c1) { return makeNode(kind, new CAstNode[] { c1 }); } + @Override public CAstNode makeNode(int kind, CAstNode c1, CAstNode c2) { return makeNode(kind, new CAstNode[] { c1, c2 }); } + @Override public CAstNode makeNode(int kind, CAstNode c1, CAstNode c2, CAstNode c3) { return makeNode(kind, new CAstNode[] { c1, c2, c3 }); } + @Override public CAstNode makeNode(int kind, CAstNode c1, CAstNode c2, CAstNode c3, CAstNode c4) { return makeNode(kind, new CAstNode[] { c1, c2, c3, c4 }); } + @Override public CAstNode makeNode(int kind, CAstNode c1, CAstNode c2, CAstNode c3, CAstNode c4, CAstNode c5) { return makeNode(kind, new CAstNode[] { c1, c2, c3, c4, c5 }); } + @Override public CAstNode makeNode(int kind, CAstNode c1, CAstNode c2, CAstNode c3, CAstNode c4, CAstNode c5, CAstNode c6) { return makeNode(kind, new CAstNode[] { c1, c2, c3, c4, c5, c6 }); } @@ -125,59 +141,73 @@ public class CAstImpl implements CAst { this.value = value; } + @Override public int getKind() { return CAstNode.CONSTANT; } + @Override public Object getValue() { return value; } + @Override public CAstNode getChild(int n) { throw new NoSuchElementException(); } + @Override public int getChildCount() { return 0; } + @Override public String toString() { return "CAstValue: " + value; } + @Override public int hashCode() { return getKind() * toString().hashCode(); } } + @Override public CAstNode makeConstant(final Object value) { return new CAstValueImpl(value); } + @Override public CAstNode makeConstant(boolean value) { return makeConstant(value ? Boolean.TRUE : Boolean.FALSE); } + @Override public CAstNode makeConstant(char value) { return makeConstant(new Character(value)); } + @Override public CAstNode makeConstant(short value) { return makeConstant(new Short(value)); } + @Override public CAstNode makeConstant(int value) { return makeConstant(new Integer(value)); } + @Override public CAstNode makeConstant(long value) { return makeConstant(new Long(value)); } + @Override public CAstNode makeConstant(float value) { return makeConstant(new Float(value)); } + @Override public CAstNode makeConstant(double value) { return makeConstant(new Double(value)); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstNodeTypeMapRecorder.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstNodeTypeMapRecorder.java index 8bbc2ffb6..b15d2e275 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstNodeTypeMapRecorder.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstNodeTypeMapRecorder.java @@ -26,6 +26,7 @@ public class CAstNodeTypeMapRecorder { private static final long serialVersionUID= 7812144102027916961L; + @Override public CAstType getNodeType(CAstNode node) { return (CAstType) get(node); } @@ -34,6 +35,7 @@ public class CAstNodeTypeMapRecorder put(node, type); } + @Override public Collection getMappedNodes() { return keySet(); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstOperator.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstOperator.java index 07f48dc85..dc527f283 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstOperator.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstOperator.java @@ -29,22 +29,27 @@ public class CAstOperator implements CAstNode { this.op = op; } + @Override public String toString() { return "OP:" + op; } + @Override public int getKind() { return CAstNode.OPERATOR; } + @Override public Object getValue() { return op; } + @Override public CAstNode getChild(int n) { throw new NoSuchElementException(); } + @Override public int getChildCount() { return 0; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstSourcePositionRecorder.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstSourcePositionRecorder.java index 2d8de6884..4df9dd6ef 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstSourcePositionRecorder.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstSourcePositionRecorder.java @@ -25,10 +25,12 @@ public class CAstSourcePositionRecorder implements CAstSourcePositionMap { private final HashMap positions = HashMapFactory.make(); + @Override public Position getPosition(CAstNode n) { return positions.get(n); } + @Override public Iterator getMappedNodes() { return positions.keySet().iterator(); } @@ -59,17 +61,26 @@ public class CAstSourcePositionRecorder implements CAstSourcePositionMap { { setPosition(n, new AbstractSourcePosition() { - public int getFirstLine() { return fl; } - public int getLastLine() { return ll; } - public int getFirstCol() { return fc; } - public int getLastCol() { return lc; } - public int getFirstOffset() { return -1; } - public int getLastOffset() { return -1; } - public URL getURL() { return url; } - public InputStream getInputStream() throws IOException { + @Override + public int getFirstLine() { return fl; } + @Override + public int getLastLine() { return ll; } + @Override + public int getFirstCol() { return fc; } + @Override + public int getLastCol() { return lc; } + @Override + public int getFirstOffset() { return -1; } + @Override + public int getLastOffset() { return -1; } + @Override + public URL getURL() { return url; } + @Override + public InputStream getInputStream() throws IOException { return file.openConnection().getInputStream(); } - public String toString() { + @Override + public String toString() { return "["+fl+":"+fc+"]->["+ll+":"+lc+"]"; } }); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstSymbolImpl.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstSymbolImpl.java index 8ae1aead8..a3e064d68 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstSymbolImpl.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstSymbolImpl.java @@ -35,5 +35,6 @@ public class CAstSymbolImpl extends CAstSymbolImplBase { super(_name, _isFinal, _isCaseInsensitive, _defaultInitValue); } + @Override public boolean isInternalName() { return false; } } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstSymbolImplBase.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstSymbolImplBase.java index ae9723247..2ec09d10a 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstSymbolImplBase.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstSymbolImplBase.java @@ -45,24 +45,30 @@ public abstract class CAstSymbolImplBase implements CAstSymbol { this._defaultInitValue= defaultInitValue; } + @Override public String name() { return _name; } + @Override public boolean isFinal() { return _isFinal; } + @Override public boolean isCaseInsensitive() { return _isCaseInsensitive; } + @Override public Object defaultInitValue() { return _defaultInitValue; } + @Override public abstract boolean isInternalName(); + @Override public String toString() { return _name; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstTypeDictionaryImpl.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstTypeDictionaryImpl.java index 87af3307f..1a583e291 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstTypeDictionaryImpl.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstTypeDictionaryImpl.java @@ -24,6 +24,7 @@ import com.ibm.wala.util.collections.HashMapFactory; public class CAstTypeDictionaryImpl implements CAstTypeDictionary { protected final Map fMap = HashMapFactory.make(); + @Override public CAstType getCAstTypeFor(Object/*ASTType*/ astType) { return (CAstType) fMap.get(astType); } @@ -33,10 +34,12 @@ public class CAstTypeDictionaryImpl implements CAstTypeDictionary { fMap.put(astType, castType); } + @Override public Iterator iterator() { return fMap.values().iterator(); } + @Override public CAstReference resolveReference(CAstReference ref) { return ref; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstValueImpl.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstValueImpl.java index 96dc8d7f2..2cd6f59f8 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstValueImpl.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstValueImpl.java @@ -30,6 +30,7 @@ public class CAstValueImpl extends CAstImpl { super(kind, cs); } + @Override public int hashCode() { int value = 1237 * kind; for(int i = 0; i < cs.length; i++) @@ -38,6 +39,7 @@ public class CAstValueImpl extends CAstImpl { return value; } + @Override public boolean equals(Object o) { if (! (o instanceof CAstNode)) return false; if (kind != ((CAstNode)o).getKind()) return false; @@ -50,6 +52,7 @@ public class CAstValueImpl extends CAstImpl { } } + @Override public CAstNode makeNode(final int kind, final CAstNode[] cs) { return new CAstNodeValueImpl(kind, cs); } @@ -60,10 +63,12 @@ public class CAstValueImpl extends CAstImpl { super(value); } + @Override public int hashCode() { return value.hashCode(); } + @Override public boolean equals(Object o) { if (o instanceof CAstNode) { return value==null? @@ -75,6 +80,7 @@ public class CAstValueImpl extends CAstImpl { } } + @Override public CAstNode makeConstant(final Object value) { return new CAstValueValueImpl(value); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/DelegatingEntity.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/DelegatingEntity.java index 047b88a30..98914fc74 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/DelegatingEntity.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/DelegatingEntity.java @@ -30,66 +30,82 @@ public class DelegatingEntity implements CAstEntity { this.base = base; } + @Override public int getKind() { return base.getKind(); } + @Override public String getName() { return base.getName(); } + @Override public String getSignature() { return base.getSignature(); } + @Override public String[] getArgumentNames() { return base.getArgumentNames(); } + @Override public CAstNode[] getArgumentDefaults() { return base.getArgumentDefaults(); } + @Override public int getArgumentCount() { return base.getArgumentCount(); } + @Override public Map> getAllScopedEntities() { return base.getAllScopedEntities(); } + @Override public Iterator getScopedEntities(CAstNode construct) { return base.getScopedEntities(construct); } + @Override public CAstNode getAST() { return base.getAST(); } + @Override public CAstControlFlowMap getControlFlow() { return base.getControlFlow(); } + @Override public CAstSourcePositionMap getSourceMap() { return base.getSourceMap(); } + @Override public CAstSourcePositionMap.Position getPosition() { return base.getPosition(); } + @Override public CAstNodeTypeMap getNodeTypeMap() { return base.getNodeTypeMap(); } + @Override public Collection getQualifiers() { return base.getQualifiers(); } + @Override public CAstType getType() { return base.getType(); } + @Override public Collection getAnnotations() { return base.getAnnotations(); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/LineNumberPosition.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/LineNumberPosition.java index f6a122162..d2c7b6efe 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/LineNumberPosition.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/LineNumberPosition.java @@ -25,24 +25,33 @@ public class LineNumberPosition extends AbstractSourcePosition { this.lineNumber = lineNumber; } + @Override public int getFirstLine() { return lineNumber; } + @Override public int getLastLine() { return lineNumber; } + @Override public int getFirstCol() { return -1; } + @Override public int getLastCol() { return -1; } + @Override public int getFirstOffset() { return -1; } + @Override public int getLastOffset() { return -1; } + @Override public URL getURL() { return url; } + @Override public InputStream getInputStream() throws IOException { return localFile.openConnection().getInputStream(); } + @Override public String toString() { String nm = url.getFile(); nm = nm.substring(nm.lastIndexOf('/') + 1); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/pattern/Alt.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/pattern/Alt.java index b56953576..5b7712c1a 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/pattern/Alt.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/pattern/Alt.java @@ -26,6 +26,7 @@ public class Alt implements NodePattern { this.right = right; } + @Override public boolean matches(CAstNode node) { return left.matches(node) || right.matches(node); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/pattern/AnyNode.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/pattern/AnyNode.java index e6f97eb7c..f71498196 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/pattern/AnyNode.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/pattern/AnyNode.java @@ -20,7 +20,8 @@ import com.ibm.wala.cast.tree.CAstNode; * */ public class AnyNode implements NodePattern { - public boolean matches(CAstNode node) { + @Override + public boolean matches(CAstNode node) { return true; } } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/pattern/NodeOfKind.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/pattern/NodeOfKind.java index 5bd0daa38..b3850255f 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/pattern/NodeOfKind.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/pattern/NodeOfKind.java @@ -34,7 +34,8 @@ public class NodeOfKind implements NodePattern { /* (non-Javadoc) * @see pattern.NodePattern#matches(com.ibm.wala.cast.tree.CAstNode) */ - public boolean matches(CAstNode node) { + @Override + public boolean matches(CAstNode node) { if(node == null || node.getKind() != kind || node.getChildCount() != children.length) return false; for(int i=0;i { + @Override public UnwindKey key() { return null; } @@ -85,12 +90,14 @@ public class AstLoopUnwinder this.parent = parent; } + @Override public UnwindKey key() { return new UnwindKey(iteration, parent.key()); } } + @Override protected CAstNode flowOutTo(Map nodeMap, CAstNode oldSource, Object label, @@ -102,6 +109,7 @@ public class AstLoopUnwinder return oldTarget; } + @Override protected CAstNode copyNodes(CAstNode n, final CAstControlFlowMap cfg, RewriteContext c, Map,CAstNode> nodeMap) { if (n instanceof CAstOperator) { return n; diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/rewrite/CAstBasicRewriter.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/rewrite/CAstBasicRewriter.java index 766a6a392..5e2cb509b 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/rewrite/CAstBasicRewriter.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/rewrite/CAstBasicRewriter.java @@ -38,6 +38,7 @@ public abstract class CAstBasicRewriter return nodeMap; } + @Override public NoKey key() { return null; } @@ -52,14 +53,17 @@ public abstract class CAstBasicRewriter Assertions.UNREACHABLE(); } + @Override public int hashCode() { return System.identityHashCode(this); } + @Override public boolean equals(Object o) { return o == this; } + @Override public NoKey parent() { return null; } @@ -69,6 +73,7 @@ public abstract class CAstBasicRewriter super(Ast, recursive, new NonCopyingContext()); } + @Override protected abstract CAstNode copyNodes(CAstNode root, final CAstControlFlowMap cfg, NonCopyingContext context, Map, CAstNode> nodeMap); } \ No newline at end of file diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/rewrite/CAstCloner.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/rewrite/CAstCloner.java index f06925bc8..0ae4b02b5 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/rewrite/CAstCloner.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/rewrite/CAstCloner.java @@ -32,6 +32,7 @@ public class CAstCloner extends CAstBasicRewriter { this(Ast, false); } + @Override protected CAstNode copyNodes(CAstNode root, final CAstControlFlowMap cfg, NonCopyingContext c, Map, CAstNode> nodeMap) { return copyNodesHackForEclipse(root, cfg, c, nodeMap); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/rewrite/CAstRewriter.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/rewrite/CAstRewriter.java index b46efe23f..485e4fa37 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/rewrite/CAstRewriter.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/rewrite/CAstRewriter.java @@ -59,8 +59,10 @@ public abstract class CAstRewriter, K e */ public interface CopyKey { + @Override int hashCode(); + @Override boolean equals(Object o); /** @@ -356,28 +358,33 @@ public abstract class CAstRewriter, K e private Map> theChildren = null; + @Override public CAstNode newRoot() { return newRoot; } + @Override public CAstControlFlowMap newCfg() { if (theCfg == null) theCfg = copyFlow(nodes, cfg, newPos()); return theCfg; } + @Override public CAstSourcePositionMap newPos() { if (theSource == null) theSource = copySource(nodes, pos); return theSource; } + @Override public CAstNodeTypeMap newTypes() { if (theTypes == null) theTypes = copyTypes(nodes, types); return theTypes; } + @Override public Map> newChildren() { if (theChildren == null) theChildren = copyChildren(root, nodes, children); @@ -397,10 +404,12 @@ public abstract class CAstRewriter, K e root.getAllScopedEntities()); return new DelegatingEntity(root) { + @Override public String toString() { return root.toString() + " (clone)"; } + @Override public Iterator getScopedEntities(CAstNode construct) { Map> newChildren = getAllScopedEntities(); if (newChildren.containsKey(construct)) { @@ -410,22 +419,27 @@ public abstract class CAstRewriter, K e } } + @Override public Map> getAllScopedEntities() { return rewrite.newChildren(); } + @Override public CAstNode getAST() { return rewrite.newRoot(); } + @Override public CAstNodeTypeMap getNodeTypeMap() { return rewrite.newTypes(); } + @Override public CAstSourcePositionMap getSourceMap() { return rewrite.newPos(); } + @Override public CAstControlFlowMap getControlFlow() { return rewrite.newCfg(); } @@ -446,10 +460,12 @@ public abstract class CAstRewriter, K e } return new DelegatingEntity(root) { + @Override public String toString() { return root.toString() + " (clone)"; } + @Override public Iterator getScopedEntities(CAstNode construct) { if (newChildren.containsKey(construct)) { return newChildren.get(construct).iterator(); @@ -458,6 +474,7 @@ public abstract class CAstRewriter, K e } } + @Override public Map> getAllScopedEntities() { return newChildren; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/visit/DelegatingCAstVisitor.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/visit/DelegatingCAstVisitor.java index 47383c62b..53e19926a 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/visit/DelegatingCAstVisitor.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/visit/DelegatingCAstVisitor.java @@ -26,6 +26,7 @@ public abstract class DelegatingCAstVisitor exten * @param context a visitor-specific context in which this file was visited * @param n the file entity */ + @Override protected C makeFileContext(C context, CAstEntity n) { return delegate.makeFileContext(context, n); } @@ -34,6 +35,7 @@ public abstract class DelegatingCAstVisitor exten * @param context a visitor-specific context in which this type was visited * @param n the type entity */ + @Override protected C makeTypeContext(C context, CAstEntity n) { return delegate.makeTypeContext(context, n); } @@ -42,6 +44,7 @@ public abstract class DelegatingCAstVisitor exten * @param context a visitor-specific context in which the code was visited * @param n the code entity */ + @Override protected C makeCodeContext(C context, CAstEntity n) { return delegate.makeCodeContext(context, n); } @@ -51,6 +54,7 @@ public abstract class DelegatingCAstVisitor exten * @param context a visitor-specific context in which the local scope was visited * @param n the local scope node */ + @Override protected C makeLocalContext(C context, CAstNode n) { return delegate.makeLocalContext(context, n); } @@ -59,6 +63,7 @@ public abstract class DelegatingCAstVisitor exten * @param context a visitor-specific context in which the unwind was visited * @param n the unwind node */ + @Override protected C makeUnwindContext(C context, CAstNode n, CAstVisitor visitor) { return delegate.makeUnwindContext(context, n, visitor); } @@ -68,6 +73,7 @@ public abstract class DelegatingCAstVisitor exten * @param entity the child entity * @return the parent entity for the given entity */ + @Override protected CAstEntity getParent(CAstEntity entity) { return delegate.getParent(entity); } @@ -77,6 +83,7 @@ public abstract class DelegatingCAstVisitor exten * @param entity the child entity * @param parent the parent entity */ + @Override protected void setParent(CAstEntity entity, CAstEntity parent) { delegate.setParent(entity, parent); } @@ -101,6 +108,7 @@ public abstract class DelegatingCAstVisitor exten * Should invoke super.doVisitEntity() for unprocessed entities. * @return true if entity was handled */ + @Override protected boolean doVisitEntity(CAstEntity n, C context, CAstVisitor visitor) { return delegate.doVisitEntity(n, context, visitor); } @@ -111,6 +119,7 @@ public abstract class DelegatingCAstVisitor exten * @param context a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean enterEntity(CAstEntity n, C context, CAstVisitor visitor) { return delegate.enterEntity(n, context, visitor); } @@ -119,6 +128,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the entity to process * @param context a visitor-specific context */ + @Override protected void postProcessEntity(CAstEntity n, C context, CAstVisitor visitor) { delegate.postProcessEntity(n, context, visitor); } @@ -129,6 +139,7 @@ public abstract class DelegatingCAstVisitor exten * @param context a visitor-specific context * @return true if no further processing is needed */ + @Override public boolean visitEntity(CAstEntity n, C context, CAstVisitor visitor) { return delegate.visitEntity(n, context, visitor); } @@ -137,6 +148,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the entity to process * @param context a visitor-specific context */ + @Override public void leaveEntity(CAstEntity n, C context, CAstVisitor visitor) { delegate.leaveEntity(n, context, visitor); } @@ -148,6 +160,7 @@ public abstract class DelegatingCAstVisitor exten * @param fileContext a visitor-specific context for this file * @return true if no further processing is needed */ + @Override protected boolean visitFileEntity(CAstEntity n, C context, C fileContext, CAstVisitor visitor) { return delegate.visitFileEntity(n, context, fileContext, visitor); } @@ -157,6 +170,7 @@ public abstract class DelegatingCAstVisitor exten * @param context a visitor-specific context * @param fileContext a visitor-specific context for this file */ + @Override protected void leaveFileEntity(CAstEntity n, C context, C fileContext, CAstVisitor visitor) { delegate.leaveFileEntity(n, context, fileContext, visitor); } @@ -166,6 +180,7 @@ public abstract class DelegatingCAstVisitor exten * @param context a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitFieldEntity(CAstEntity n, C context, CAstVisitor visitor) { return delegate.visitFieldEntity(n, context, visitor); } @@ -174,6 +189,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the entity to process * @param context a visitor-specific context */ + @Override protected void leaveFieldEntity(CAstEntity n, C context, CAstVisitor visitor) { delegate.leaveFieldEntity(n, context, visitor); } @@ -184,6 +200,7 @@ public abstract class DelegatingCAstVisitor exten * @param typeContext a visitor-specific context for this type * @return true if no further processing is needed */ + @Override protected boolean visitTypeEntity(CAstEntity n, C context, C typeContext, CAstVisitor visitor) { return delegate.visitTypeEntity(n, context, typeContext, visitor); } @@ -193,6 +210,7 @@ public abstract class DelegatingCAstVisitor exten * @param context a visitor-specific context * @param typeContext a visitor-specific context for this type */ + @Override protected void leaveTypeEntity(CAstEntity n, C context, C typeContext, CAstVisitor visitor) { delegate.leaveTypeEntity(n, context, typeContext, visitor); } @@ -203,6 +221,7 @@ public abstract class DelegatingCAstVisitor exten * @param codeContext a visitor-specific context for this function * @return true if no further processing is needed */ + @Override protected boolean visitFunctionEntity(CAstEntity n, C context, C codeContext, CAstVisitor visitor) { return delegate.visitFunctionEntity(n, context, codeContext, visitor); } @@ -212,6 +231,7 @@ public abstract class DelegatingCAstVisitor exten * @param context a visitor-specific context * @param codeContext a visitor-specific context for this function */ + @Override protected void leaveFunctionEntity(CAstEntity n, C context, C codeContext, CAstVisitor visitor) { delegate.leaveFunctionEntity(n, context, codeContext, visitor); } @@ -222,6 +242,7 @@ public abstract class DelegatingCAstVisitor exten * @param codeContext a visitor-specific context for this script * @return true if no further processing is needed */ + @Override protected boolean visitScriptEntity(CAstEntity n, C context, C codeContext, CAstVisitor visitor) { return delegate.visitScriptEntity(n, context, codeContext, visitor); } @@ -231,6 +252,7 @@ public abstract class DelegatingCAstVisitor exten * @param context a visitor-specific context * @param codeContext a visitor-specific context for this script */ + @Override protected void leaveScriptEntity(CAstEntity n, C context, C codeContext, CAstVisitor visitor) { delegate.leaveScriptEntity(n, context, codeContext, visitor); } @@ -241,6 +263,7 @@ public abstract class DelegatingCAstVisitor exten * Should invoke super.doVisit() for unprocessed nodes. * @return true if node was handled */ + @Override protected boolean doVisit(CAstNode n, C context, CAstVisitor visitor) { return delegate.doVisit(n, context, visitor); } @@ -251,6 +274,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean enterNode(CAstNode n, C c, CAstVisitor visitor) { return delegate.enterNode(n, c, visitor); } @@ -259,6 +283,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void postProcessNode(CAstNode n, C c, CAstVisitor visitor) { delegate.postProcessNode(n, c, visitor); } @@ -269,6 +294,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override public boolean visitNode(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitNode(n, c, visitor); } @@ -277,6 +303,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override public void leaveNode(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveNode(n, c, visitor); } @@ -287,6 +314,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitFunctionExpr(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitFunctionExpr(n, c, visitor); } @@ -295,6 +323,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveFunctionExpr(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveFunctionExpr(n, c, visitor); } @@ -304,6 +333,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitFunctionStmt(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitFunctionStmt(n, c, visitor); } @@ -312,6 +342,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveFunctionStmt(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveFunctionStmt(n, c, visitor); } @@ -321,6 +352,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitLocalScope(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitLocalScope(n, c, visitor); } @@ -329,6 +361,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveLocalScope(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveLocalScope(n, c, visitor); } @@ -338,6 +371,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitBlockExpr(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitBlockExpr(n, c, visitor); } @@ -346,6 +380,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveBlockExpr(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveBlockExpr(n, c, visitor); } @@ -355,6 +390,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitBlockStmt(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitBlockStmt(n, c, visitor); } @@ -363,6 +399,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveBlockStmt(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveBlockStmt(n, c, visitor); } @@ -372,6 +409,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitLoop(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitLoop(n, c, visitor); } @@ -380,6 +418,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveLoopHeader(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveLoopHeader(n, c, visitor); } @@ -388,6 +427,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveLoop(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveLoop(n, c, visitor); } @@ -397,6 +437,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitGetCaughtException(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitGetCaughtException(n, c, visitor); } @@ -405,6 +446,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveGetCaughtException(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveGetCaughtException(n, c, visitor); } @@ -414,6 +456,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitThis(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitThis(n, c, visitor); } @@ -422,6 +465,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveThis(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveThis(n, c, visitor); } @@ -431,6 +475,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitSuper(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitSuper(n, c, visitor); } @@ -439,6 +484,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveSuper(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveSuper(n, c, visitor); } @@ -448,6 +494,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitCall(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitCall(n, c, visitor); } @@ -456,6 +503,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveCall(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveCall(n, c, visitor); } @@ -465,6 +513,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitVar(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitVar(n, c, visitor); } @@ -473,6 +522,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveVar(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveVar(n, c, visitor); } @@ -482,6 +532,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitConstant(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitConstant(n, c, visitor); } @@ -490,6 +541,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveConstant(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveConstant(n, c, visitor); } @@ -499,6 +551,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitBinaryExpr(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitBinaryExpr(n, c, visitor); } @@ -507,6 +560,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveBinaryExpr(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveBinaryExpr(n, c, visitor); } @@ -516,6 +570,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitUnaryExpr(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitUnaryExpr(n, c, visitor); } @@ -524,6 +579,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveUnaryExpr(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveUnaryExpr(n, c, visitor); } @@ -533,6 +589,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitArrayLength(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitArrayLength(n, c, visitor); } @@ -541,6 +598,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveArrayLength(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveArrayLength(n, c, visitor); } @@ -550,6 +608,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitArrayRef(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitArrayRef(n, c, visitor); } @@ -558,6 +617,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveArrayRef(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveArrayRef(n, c, visitor); } @@ -567,6 +627,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitDeclStmt(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitDeclStmt(n, c, visitor); } @@ -575,6 +636,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveDeclStmt(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveDeclStmt(n, c, visitor); } @@ -584,6 +646,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitReturn(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitReturn(n, c, visitor); } @@ -592,6 +655,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveReturn(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveReturn(n, c, visitor); } @@ -601,6 +665,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitIfgoto(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitIfgoto(n, c, visitor); } @@ -609,6 +674,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveIfgoto(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveIfgoto(n, c, visitor); } @@ -618,6 +684,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitGoto(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitGoto(n, c, visitor); } @@ -626,6 +693,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveGoto(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveGoto(n, c, visitor); } @@ -635,6 +703,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitLabelStmt(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitLabelStmt(n, c, visitor); } @@ -643,6 +712,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveLabelStmt(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveLabelStmt(n, c, visitor); } @@ -652,6 +722,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitIfStmt(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitIfStmt(n, c, visitor); } @@ -660,6 +731,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveIfStmtCondition(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveIfStmtCondition(n, c, visitor); } @@ -668,6 +740,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveIfStmtTrueClause(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveIfStmtTrueClause(n, c, visitor); } @@ -676,6 +749,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveIfStmt(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveIfStmt(n, c, visitor); } @@ -685,6 +759,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitIfExpr(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitIfExpr(n, c, visitor); } @@ -693,6 +768,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveIfExprCondition(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveIfExprCondition(n, c, visitor); } @@ -701,6 +777,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveIfExprTrueClause(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveIfExprTrueClause(n, c, visitor); } @@ -709,6 +786,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveIfExpr(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveIfExpr(n, c, visitor); } @@ -718,6 +796,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitNew(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitNew(n, c, visitor); } @@ -726,6 +805,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveNew(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveNew(n, c, visitor); } @@ -735,6 +815,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitObjectLiteral(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitObjectLiteral(n, c, visitor); } @@ -744,6 +825,7 @@ public abstract class DelegatingCAstVisitor exten * @param i the field position that was initialized * @param c a visitor-specific context */ + @Override protected void leaveObjectLiteralFieldInit(CAstNode n, int i, C c, CAstVisitor visitor) { delegate.leaveObjectLiteralFieldInit(n, i, c, visitor); } @@ -752,6 +834,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveObjectLiteral(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveObjectLiteral(n, c, visitor); } @@ -761,6 +844,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitArrayLiteral(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitArrayLiteral(n, c, visitor); } @@ -769,6 +853,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveArrayLiteralObject(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveArrayLiteralObject(n, c, visitor); } @@ -778,6 +863,7 @@ public abstract class DelegatingCAstVisitor exten * @param i the index that was initialized * @param c a visitor-specific context */ + @Override protected void leaveArrayLiteralInitElement(CAstNode n, int i, C c, CAstVisitor visitor) { delegate.leaveArrayLiteralInitElement(n, i, c, visitor); } @@ -786,6 +872,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveArrayLiteral(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveArrayLiteral(n, c, visitor); } @@ -795,6 +882,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitObjectRef(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitObjectRef(n, c, visitor); } @@ -803,6 +891,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveObjectRef(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveObjectRef(n, c, visitor); } @@ -812,6 +901,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override public boolean visitAssign(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitAssign(n, c, visitor); } @@ -820,6 +910,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override public void leaveAssign(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveAssign(n, c, visitor); } @@ -831,6 +922,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitArrayRefAssign(CAstNode n, CAstNode v, CAstNode a, C c, CAstVisitor visitor) { return delegate.visitArrayRefAssign(n, v, a, c, visitor); } @@ -841,6 +933,7 @@ public abstract class DelegatingCAstVisitor exten * @param a the assignment node to process * @param c a visitor-specific context */ + @Override protected void leaveArrayRefAssign(CAstNode n, CAstNode v, CAstNode a, C c, CAstVisitor visitor) { delegate.leaveArrayRefAssign(n, v, a, c, visitor); } @@ -853,6 +946,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitArrayRefAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, CAstVisitor visitor) { return delegate.visitArrayRefAssignOp(n, v, a, pre, c, visitor); } @@ -864,6 +958,7 @@ public abstract class DelegatingCAstVisitor exten * @param pre whether the value before the operation should be used * @param c a visitor-specific context */ + @Override protected void leaveArrayRefAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, CAstVisitor visitor) { delegate.leaveArrayRefAssignOp(n, v, a, pre, c, visitor); } @@ -875,6 +970,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitObjectRefAssign(CAstNode n, CAstNode v, CAstNode a, C c, CAstVisitor visitor) { return delegate.visitObjectRefAssign(n, v, a, c, visitor); } @@ -885,6 +981,7 @@ public abstract class DelegatingCAstVisitor exten * @param a the assignment node to process * @param c a visitor-specific context */ + @Override protected void leaveObjectRefAssign(CAstNode n, CAstNode v, CAstNode a, C c, CAstVisitor visitor) { delegate.leaveObjectRefAssign(n, v, a, c, visitor); } @@ -897,6 +994,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitObjectRefAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, CAstVisitor visitor) { return delegate.visitObjectRefAssignOp(n, v, a, pre, c, visitor); } @@ -908,6 +1006,7 @@ public abstract class DelegatingCAstVisitor exten * @param pre whether the value before the operation should be used * @param c a visitor-specific context */ + @Override protected void leaveObjectRefAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, CAstVisitor visitor) { delegate.leaveObjectRefAssignOp(n, v, a, pre, c, visitor); } @@ -919,6 +1018,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitBlockExprAssign(CAstNode n, CAstNode v, CAstNode a, C c, CAstVisitor visitor) { return delegate.visitBlockExprAssign(n, v, a, c, visitor); } @@ -929,6 +1029,7 @@ public abstract class DelegatingCAstVisitor exten * @param a the assignment node to process * @param c a visitor-specific context */ + @Override protected void leaveBlockExprAssign(CAstNode n, CAstNode v, CAstNode a, C c, CAstVisitor visitor) { delegate.leaveBlockExprAssign(n, v, a, c, visitor); } @@ -941,6 +1042,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitBlockExprAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, CAstVisitor visitor) { return delegate.visitBlockExprAssignOp(n, v, a, pre, c, visitor); } @@ -952,6 +1054,7 @@ public abstract class DelegatingCAstVisitor exten * @param pre whether the value before the operation should be used * @param c a visitor-specific context */ + @Override protected void leaveBlockExprAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, CAstVisitor visitor) { delegate.leaveBlockExprAssignOp(n, v, a, pre, c, visitor); } @@ -963,6 +1066,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitVarAssign(CAstNode n, CAstNode v, CAstNode a, C c, CAstVisitor visitor) { return delegate.visitVarAssign(n, v, a, c, visitor); } @@ -973,6 +1077,7 @@ public abstract class DelegatingCAstVisitor exten * @param a the assignment node to process * @param c a visitor-specific context */ + @Override protected void leaveVarAssign(CAstNode n, CAstNode v, CAstNode a, C c, CAstVisitor visitor) { delegate.leaveVarAssign(n, v, a, c, visitor); } @@ -985,6 +1090,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitVarAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, CAstVisitor visitor) { return delegate.visitVarAssignOp(n, v, a, pre, c, visitor); } @@ -996,6 +1102,7 @@ public abstract class DelegatingCAstVisitor exten * @param pre whether the value before the operation should be used * @param c a visitor-specific context */ + @Override protected void leaveVarAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, CAstVisitor visitor) { delegate.leaveVarAssignOp(n, v, a, pre, c, visitor); } @@ -1005,6 +1112,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitSwitch(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitSwitch(n, c, visitor); } @@ -1013,6 +1121,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveSwitchValue(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveSwitchValue(n, c, visitor); } @@ -1021,6 +1130,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveSwitch(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveSwitch(n, c, visitor); } @@ -1030,6 +1140,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitThrow(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitThrow(n, c, visitor); } @@ -1038,6 +1149,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveThrow(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveThrow(n, c, visitor); } @@ -1047,6 +1159,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitCatch(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitCatch(n, c, visitor); } @@ -1055,6 +1168,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveCatch(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveCatch(n, c, visitor); } @@ -1064,6 +1178,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitUnwind(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitUnwind(n, c, visitor); } @@ -1072,6 +1187,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveUnwind(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveUnwind(n, c, visitor); } @@ -1081,6 +1197,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitTry(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitTry(n, c, visitor); } @@ -1089,6 +1206,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveTryBlock(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveTryBlock(n, c, visitor); } @@ -1097,6 +1215,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveTry(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveTry(n, c, visitor); } @@ -1106,6 +1225,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitEmpty(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitEmpty(n, c, visitor); } @@ -1114,6 +1234,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveEmpty(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveEmpty(n, c, visitor); } @@ -1123,6 +1244,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitPrimitive(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitPrimitive(n, c, visitor); } @@ -1131,6 +1253,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leavePrimitive(CAstNode n, C c, CAstVisitor visitor) { delegate.leavePrimitive(n, c, visitor); } @@ -1140,6 +1263,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitVoid(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitVoid(n, c, visitor); } @@ -1148,6 +1272,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveVoid(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveVoid(n, c, visitor); } @@ -1157,6 +1282,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitCast(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitCast(n, c, visitor); } @@ -1165,6 +1291,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveCast(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveCast(n, c, visitor); } @@ -1174,6 +1301,7 @@ public abstract class DelegatingCAstVisitor exten * @param c a visitor-specific context * @return true if no further processing is needed */ + @Override protected boolean visitInstanceOf(CAstNode n, C c, CAstVisitor visitor) { return delegate.visitInstanceOf(n, c, visitor); } @@ -1182,6 +1310,7 @@ public abstract class DelegatingCAstVisitor exten * @param n the node to process * @param c a visitor-specific context */ + @Override protected void leaveInstanceOf(CAstNode n, C c, CAstVisitor visitor) { delegate.leaveInstanceOf(n, c, visitor); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/CAstFunctions.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/CAstFunctions.java index e0187eb13..a189bebb6 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/CAstFunctions.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/CAstFunctions.java @@ -41,26 +41,32 @@ public class CAstFunctions { private final Map> pendingChildren = HashMapFactory.make(); + @Override protected Iterator getPendingChildren(CAstNode n) { return pendingChildren.get(n); } + @Override protected void setPendingChildren(CAstNode v, Iterator iterator) { pendingChildren.put(v, iterator); } + @Override protected Iterator getConnected(final CAstNode n) { return new Iterator() { private int i = 0; + @Override public boolean hasNext() { return i < ((CAstNode) n).getChildCount(); } + @Override public CAstNode next() { return ((CAstNode) n).getChild(i++); } + @Override public void remove() { throw new UnsupportedOperationException(); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/CAstPattern.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/CAstPattern.java index 143531b2f..9c722ae0c 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/CAstPattern.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/CAstPattern.java @@ -137,6 +137,7 @@ public class CAstPattern { this.children = null; } + @Override public String toString() { StringBuffer sb = new StringBuffer(); @@ -392,9 +393,11 @@ public class CAstPattern { }; v.visit(e.getAST(), new Context() { + @Override public CAstEntity top() { return e; } + @Override public CAstSourcePositionMap getSourceMap() { return e.getSourceMap(); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/SourceBuffer.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/SourceBuffer.java index 11ca8d2c1..a312451d9 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/SourceBuffer.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/SourceBuffer.java @@ -55,6 +55,7 @@ public class SourceBuffer { } } + @Override public String toString() { StringBuffer result = new StringBuffer(); for(int i = 0; i < lines.length; i++) { @@ -94,14 +95,22 @@ public class SourceBuffer { final Position hack = range; range = new AbstractSourcePosition() { - public int getFirstLine() { return hack.getFirstLine(); } - public int getLastLine() { return hack.getFirstLine(); } - public int getFirstCol() { return hack.getFirstCol(); } - public int getLastCol() { return hack.getFirstCol(); } - public int getFirstOffset() { return hack.getFirstOffset(); } - public int getLastOffset() { return hack.getFirstOffset(); } - public URL getURL() { return hack.getURL(); } - public InputStream getInputStream() throws IOException { + @Override + public int getFirstLine() { return hack.getFirstLine(); } + @Override + public int getLastLine() { return hack.getFirstLine(); } + @Override + public int getFirstCol() { return hack.getFirstCol(); } + @Override + public int getLastCol() { return hack.getFirstCol(); } + @Override + public int getFirstOffset() { return hack.getFirstOffset(); } + @Override + public int getLastOffset() { return hack.getFirstOffset(); } + @Override + public URL getURL() { return hack.getURL(); } + @Override + public InputStream getInputStream() throws IOException { return hack.getInputStream(); } }; diff --git a/com.ibm.wala.core.testdata/src/demandpa/ArraySet.java b/com.ibm.wala.core.testdata/src/demandpa/ArraySet.java index 889fdab53..014ad5eef 100644 --- a/com.ibm.wala.core.testdata/src/demandpa/ArraySet.java +++ b/com.ibm.wala.core.testdata/src/demandpa/ArraySet.java @@ -57,6 +57,7 @@ class ArraySet { } class ArraySetIter implements Iter { + @Override public Object next() { return elems[0]; } diff --git a/com.ibm.wala.core.testdata/src/demandpa/DummyHashMap.java b/com.ibm.wala.core.testdata/src/demandpa/DummyHashMap.java index 8420393e6..87c6589a0 100644 --- a/com.ibm.wala.core.testdata/src/demandpa/DummyHashMap.java +++ b/com.ibm.wala.core.testdata/src/demandpa/DummyHashMap.java @@ -28,6 +28,7 @@ public class DummyHashMap { public Iter keyIter() { return new Iter() { + @Override public Object next() { return keys[0]; } @@ -37,6 +38,7 @@ public class DummyHashMap { public Iter valuesIter() { return new Iter() { + @Override public Object next() { return values[0]; } diff --git a/com.ibm.wala.core.testdata/src/demandpa/DummyLinkedList.java b/com.ibm.wala.core.testdata/src/demandpa/DummyLinkedList.java index bf1e6ad66..c08077a10 100644 --- a/com.ibm.wala.core.testdata/src/demandpa/DummyLinkedList.java +++ b/com.ibm.wala.core.testdata/src/demandpa/DummyLinkedList.java @@ -45,6 +45,7 @@ public class DummyLinkedList { public Iter iterator() { return new Iter() { + @Override public Object next() { // just return some arbitrary element, from the point of view of flow-insensitive points-to analysis Element tmp = head; diff --git a/com.ibm.wala.core.testdata/src/multiTypes/Foo.java b/com.ibm.wala.core.testdata/src/multiTypes/Foo.java index 8085fc90a..bfba119b7 100644 --- a/com.ibm.wala.core.testdata/src/multiTypes/Foo.java +++ b/com.ibm.wala.core.testdata/src/multiTypes/Foo.java @@ -25,6 +25,7 @@ public class Foo { @SuppressWarnings("unused") private static class B extends A { + @Override public void bar() { } } diff --git a/com.ibm.wala.core.testdata/src/recurse/NList.java b/com.ibm.wala.core.testdata/src/recurse/NList.java index 427e0dde1..cc2c4091c 100644 --- a/com.ibm.wala.core.testdata/src/recurse/NList.java +++ b/com.ibm.wala.core.testdata/src/recurse/NList.java @@ -40,6 +40,7 @@ public class NList implements Collection { /* (non-Javadoc) * @see java.util.Collection#size() */ + @Override public int size() { // TODO Auto-generated method stub return 0; @@ -48,6 +49,7 @@ public class NList implements Collection { /* (non-Javadoc) * @see java.util.Collection#isEmpty() */ + @Override public boolean isEmpty() { // TODO Auto-generated method stub return false; @@ -56,6 +58,7 @@ public class NList implements Collection { /* (non-Javadoc) * @see java.util.Collection#contains(java.lang.Object) */ + @Override public boolean contains(Object o) { // TODO Auto-generated method stub return false; @@ -64,6 +67,7 @@ public class NList implements Collection { /* (non-Javadoc) * @see java.util.Collection#iterator() */ + @Override public Iterator iterator() { // TODO Auto-generated method stub return null; @@ -72,6 +76,7 @@ public class NList implements Collection { /* (non-Javadoc) * @see java.util.Collection#toArray() */ + @Override public Object[] toArray() { // TODO Auto-generated method stub return null; @@ -81,6 +86,7 @@ public class NList implements Collection { /* (non-Javadoc) * @see java.util.Collection#add(java.lang.Object) */ + @Override public boolean add(Object o) { // TODO Auto-generated method stub return false; @@ -89,6 +95,7 @@ public class NList implements Collection { /* (non-Javadoc) * @see java.util.Collection#remove(java.lang.Object) */ + @Override public boolean remove(Object o) { // TODO Auto-generated method stub return false; @@ -97,6 +104,7 @@ public class NList implements Collection { /* (non-Javadoc) * @see java.util.Collection#containsAll(java.util.Collection) */ + @Override public boolean containsAll(Collection c) { // TODO Auto-generated method stub return false; @@ -105,6 +113,7 @@ public class NList implements Collection { /* (non-Javadoc) * @see java.util.Collection#addAll(java.util.Collection) */ + @Override public boolean addAll(Collection c) { // TODO Auto-generated method stub return false; @@ -113,6 +122,7 @@ public class NList implements Collection { /* (non-Javadoc) * @see java.util.Collection#removeAll(java.util.Collection) */ + @Override public boolean removeAll(Collection c) { // TODO Auto-generated method stub return false; @@ -121,6 +131,7 @@ public class NList implements Collection { /* (non-Javadoc) * @see java.util.Collection#retainAll(java.util.Collection) */ + @Override public boolean retainAll(Collection c) { // TODO Auto-generated method stub return false; @@ -129,12 +140,14 @@ public class NList implements Collection { /* (non-Javadoc) * @see java.util.Collection#clear() */ + @Override public void clear() { // TODO Auto-generated method stub } + @Override public Object[] toArray(Object[] a) { // TODO Auto-generated method stub return null; diff --git a/com.ibm.wala.core.testdata/src/reflection/Reflect5.java b/com.ibm.wala.core.testdata/src/reflection/Reflect5.java index 185e060e7..66605ef13 100644 --- a/com.ibm.wala.core.testdata/src/reflection/Reflect5.java +++ b/com.ibm.wala.core.testdata/src/reflection/Reflect5.java @@ -22,7 +22,8 @@ public class Reflect5 { public static class A { private A() { } - public String toString() { + @Override + public String toString() { return "Instance of A"; } } diff --git a/com.ibm.wala.core.testdata/src/reflection/Reflect6.java b/com.ibm.wala.core.testdata/src/reflection/Reflect6.java index 68c880787..5c1737660 100644 --- a/com.ibm.wala.core.testdata/src/reflection/Reflect6.java +++ b/com.ibm.wala.core.testdata/src/reflection/Reflect6.java @@ -22,7 +22,8 @@ public class Reflect6 { public static class A { private A(int i) { } - public String toString() { + @Override + public String toString() { return "Instance of A"; } } diff --git a/com.ibm.wala.core.testdata/src/slice/B.java b/com.ibm.wala.core.testdata/src/slice/B.java index 6e0821e00..f52ce1528 100644 --- a/com.ibm.wala.core.testdata/src/slice/B.java +++ b/com.ibm.wala.core.testdata/src/slice/B.java @@ -11,6 +11,7 @@ package slice; class B extends A { + @Override Object foo() { return new Float(4); } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/FloydWarshallTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/FloydWarshallTest.java index eafa6e85e..8c45a5379 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/FloydWarshallTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/FloydWarshallTest.java @@ -37,6 +37,7 @@ public class FloydWarshallTest { private final MutableIntSet preds = IntSetUtil.make(); private final MutableIntSet succs = IntSetUtil.make(); + @Override public int getGraphNodeId() { return number; } @@ -45,38 +46,47 @@ public class FloydWarshallTest { this.number = number; } + @Override public void setGraphNodeId(int number) { throw new UnsupportedOperationException(); } + @Override public IntSet getSuccNumbers() { return succs; } + @Override public IntSet getPredNumbers() { return preds; } + @Override public void addSucc(int n) { succs.add(n); } + @Override public void addPred(int n) { preds.add(n); } + @Override public void removeAllIncidentEdges() { throw new UnsupportedOperationException(); } + @Override public void removeIncomingEdges() { throw new UnsupportedOperationException(); } + @Override public void removeOutgoingEdges() { throw new UnsupportedOperationException(); } + @Override public String toString() { return "["+number+"]"; } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/GraphDataflowTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/GraphDataflowTest.java index a3425ac98..7485da720 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/GraphDataflowTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/GraphDataflowTest.java @@ -130,23 +130,28 @@ public class GraphDataflowTest extends WalaTestCase { final OrdinalSetMapping values = new MutableMapping(nodes); ITransferFunctionProvider functions = new ITransferFunctionProvider() { + @Override public UnaryOperator getNodeTransferFunction(String node) { return new BitVectorUnionConstant(values.getMappedIndex(node)); } + @Override public boolean hasNodeTransferFunctions() { return true; } + @Override public UnaryOperator getEdgeTransferFunction(String from, String to) { Assertions.UNREACHABLE(); return null; } + @Override public boolean hasEdgeTransferFunctions() { return false; } + @Override public AbstractMeetOperator getMeetOperator() { return BitVectorUnion.instance(); } @@ -163,14 +168,17 @@ public class GraphDataflowTest extends WalaTestCase { final OrdinalSetMapping values = new MutableMapping(nodes); ITransferFunctionProvider functions = new ITransferFunctionProvider() { + @Override public UnaryOperator getNodeTransferFunction(String node) { return new BitVectorUnionConstant(values.getMappedIndex(node)); } + @Override public boolean hasNodeTransferFunctions() { return true; } + @Override public UnaryOperator getEdgeTransferFunction(String from, String to) { if (from == nodes[1] && to == nodes[3]) return new BitVectorFilter(zero()); @@ -181,10 +189,12 @@ public class GraphDataflowTest extends WalaTestCase { } } + @Override public boolean hasEdgeTransferFunctions() { return true; } + @Override public AbstractMeetOperator getMeetOperator() { return BitVectorUnion.instance(); } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PathFinderTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PathFinderTest.java index 20c3e329f..da36b9085 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PathFinderTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PathFinderTest.java @@ -43,6 +43,7 @@ public class PathFinderTest { private static DFSAllPathsFinder makeFinder(Graph g, String start, final String end) { return new DFSAllPathsFinder(g, start, new Filter() { + @Override public boolean accepts(String o) { return end.equals(o); } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CallGraphTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CallGraphTest.java index 51cf8d70d..60da43bbc 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CallGraphTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CallGraphTest.java @@ -219,6 +219,7 @@ public class CallGraphTest extends WalaTestCase { } } return new Iterable() { + @Override public Iterator iterator() { return result.iterator(); } @@ -275,6 +276,7 @@ public class CallGraphTest extends WalaTestCase { } } return new Iterable() { + @Override public Iterator iterator() { return result.iterator(); } @@ -458,6 +460,7 @@ public class CallGraphTest extends WalaTestCase { /* * @see com.ibm.wala.util.graph.NodeManager#iterateNodes() */ + @Override public Iterator iterator() { return nodes.iterator(); } @@ -465,6 +468,7 @@ public class CallGraphTest extends WalaTestCase { /* * @see com.ibm.wala.util.graph.NodeManager#containsNode(java.lang.Object) */ + @Override public boolean containsNode(MethodReference N) { return nodes.contains(N); } @@ -472,6 +476,7 @@ public class CallGraphTest extends WalaTestCase { /* * @see com.ibm.wala.util.graph.NodeManager#getNumberOfNodes() */ + @Override public int getNumberOfNodes() { return nodes.size(); } @@ -479,6 +484,7 @@ public class CallGraphTest extends WalaTestCase { /* * @see com.ibm.wala.util.graph.EdgeManager#getPredNodes(java.lang.Object) */ + @Override public Iterator getPredNodes(MethodReference N) { Set pred = HashSetFactory.make(10); MethodReference methodReference = N; @@ -492,6 +498,7 @@ public class CallGraphTest extends WalaTestCase { /* * @see com.ibm.wala.util.graph.EdgeManager#getPredNodeCount(java.lang.Object) */ + @Override public int getPredNodeCount(MethodReference N) { int count = 0; for (Iterator ps = getPredNodes(N); ps.hasNext(); count++, ps.next()) @@ -502,6 +509,7 @@ public class CallGraphTest extends WalaTestCase { /* * @see com.ibm.wala.util.graph.EdgeManager#getSuccNodes(java.lang.Object) */ + @Override public Iterator getSuccNodes(MethodReference N) { Set succ = HashSetFactory.make(10); MethodReference methodReference = N; @@ -515,6 +523,7 @@ public class CallGraphTest extends WalaTestCase { /* * @see com.ibm.wala.util.graph.EdgeManager#getSuccNodeCount(java.lang.Object) */ + @Override public int getSuccNodeCount(MethodReference N) { int count = 0; for (Iterator ps = getSuccNodes(N); ps.hasNext(); count++, ps.next()) @@ -525,6 +534,7 @@ public class CallGraphTest extends WalaTestCase { /* * @see com.ibm.wala.util.graph.NodeManager#addNode(java.lang.Object) */ + @Override public void addNode(MethodReference n) { Assertions.UNREACHABLE(); } @@ -532,6 +542,7 @@ public class CallGraphTest extends WalaTestCase { /* * @see com.ibm.wala.util.graph.NodeManager#removeNode(java.lang.Object) */ + @Override public void removeNode(MethodReference n) { Assertions.UNREACHABLE(); } @@ -539,10 +550,12 @@ public class CallGraphTest extends WalaTestCase { /* * @see com.ibm.wala.util.graph.EdgeManager#addEdge(java.lang.Object, java.lang.Object) */ + @Override public void addEdge(MethodReference src, MethodReference dst) { Assertions.UNREACHABLE(); } + @Override public void removeEdge(MethodReference src, MethodReference dst) { Assertions.UNREACHABLE(); } @@ -550,6 +563,7 @@ public class CallGraphTest extends WalaTestCase { /* * @see com.ibm.wala.util.graph.EdgeManager#removeAllIncidentEdges(java.lang.Object) */ + @Override public void removeAllIncidentEdges(MethodReference node) { Assertions.UNREACHABLE(); } @@ -557,22 +571,26 @@ public class CallGraphTest extends WalaTestCase { /* * @see com.ibm.wala.util.graph.Graph#removeNodeAndEdges(java.lang.Object) */ + @Override public void removeNodeAndEdges(MethodReference N) { Assertions.UNREACHABLE(); } + @Override public void removeIncomingEdges(MethodReference node) { // TODO Auto-generated method stubMethodReference Assertions.UNREACHABLE(); } + @Override public void removeOutgoingEdges(MethodReference node) { // TODO Auto-generated method stub Assertions.UNREACHABLE(); } + @Override public boolean hasEdge(MethodReference src, MethodReference dst) { for (Iterator succNodes = getSuccNodes(src); succNodes.hasNext();) { if (dst.equals(succNodes.next())) { diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/PiNodeCallGraphTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/PiNodeCallGraphTest.java index ef0309ebe..ed061d25c 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/PiNodeCallGraphTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/PiNodeCallGraphTest.java @@ -38,7 +38,6 @@ import com.ibm.wala.types.TypeName; import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.CancelException; import com.ibm.wala.util.collections.HashSetFactory; -import com.ibm.wala.util.collections.Iterator2List; import com.ibm.wala.util.strings.Atom; /** diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/cha/SourceMapTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/cha/SourceMapTest.java index 356f03d8c..366b63373 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/cha/SourceMapTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/cha/SourceMapTest.java @@ -15,7 +15,9 @@ import java.io.IOException; import org.junit.Assert; import org.junit.Test; +import com.ibm.wala.classLoader.BytecodeClass; import com.ibm.wala.classLoader.IClass; +import com.ibm.wala.classLoader.Module; import com.ibm.wala.core.tests.util.TestConstants; import com.ibm.wala.core.tests.util.WalaTestCase; import com.ibm.wala.ipa.callgraph.AnalysisScope; @@ -60,5 +62,8 @@ public class SourceMapTest extends WalaTestCase { String sourceFile = klass.getSourceFileName(); Assert.assertTrue(sourceFile != null); System.err.println("Source file: " + sourceFile); + Module container = ((BytecodeClass)klass).getContainer(); + Assert.assertTrue(container != null); + System.err.println("container: " + container); } } \ No newline at end of file diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/dataflow/ContextInsensitiveReachingDefs.java b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/dataflow/ContextInsensitiveReachingDefs.java index 4b43a4edf..83615e658 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/dataflow/ContextInsensitiveReachingDefs.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/dataflow/ContextInsensitiveReachingDefs.java @@ -113,10 +113,12 @@ public class ContextInsensitiveReachingDefs { /** * our meet operator is set union */ + @Override public AbstractMeetOperator getMeetOperator() { return BitVectorUnion.instance(); } + @Override public UnaryOperator getNodeTransferFunction(BasicBlockInContext node) { IExplodedBasicBlock ebb = node.getDelegate(); SSAInstruction instruction = ebb.getInstruction(); @@ -141,10 +143,12 @@ public class ContextInsensitiveReachingDefs { * here we need an edge transfer function for call-to-return edges (see * {@link #getEdgeTransferFunction(BasicBlockInContext, BasicBlockInContext)}) */ + @Override public boolean hasEdgeTransferFunctions() { return true; } + @Override public boolean hasNodeTransferFunctions() { return true; } @@ -153,6 +157,7 @@ public class ContextInsensitiveReachingDefs { * for direct call-to-return edges at a call site, the edge transfer function will kill all facts, since we only want to * consider facts that arise from going through the callee */ + @Override public UnaryOperator getEdgeTransferFunction(BasicBlockInContext src, BasicBlockInContext dst) { if (isCallToReturnEdge(src, dst)) { diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/dataflow/ContextSensitiveReachingDefs.java b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/dataflow/ContextSensitiveReachingDefs.java index f9404e12f..572971cc2 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/dataflow/ContextSensitiveReachingDefs.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/dataflow/ContextSensitiveReachingDefs.java @@ -75,6 +75,7 @@ public class ContextSensitiveReachingDefs { private class ReachingDefsDomain extends MutableMapping> implements TabulationDomain, BasicBlockInContext> { + @Override public boolean hasPriorityOver(PathEdge> p1, PathEdge> p2) { // don't worry about worklist priorities @@ -96,6 +97,7 @@ public class ContextSensitiveReachingDefs { * * @see ReachingDefsProblem */ + @Override public IFlowFunction getUnbalancedReturnFlowFunction(BasicBlockInContext src, BasicBlockInContext dest) { return IdentityFlowFunction.identity(); @@ -104,6 +106,7 @@ public class ContextSensitiveReachingDefs { /** * flow function from caller to callee; just the identity function */ + @Override public IUnaryFlowFunction getCallFlowFunction(BasicBlockInContext src, BasicBlockInContext dest, BasicBlockInContext ret) { return IdentityFlowFunction.identity(); @@ -112,6 +115,7 @@ public class ContextSensitiveReachingDefs { /** * flow function from call node to return node when there are no targets for the call site; not a case we are expecting */ + @Override public IUnaryFlowFunction getCallNoneToReturnFlowFunction(BasicBlockInContext src, BasicBlockInContext dest) { // if we're missing callees, just keep what information we have @@ -122,6 +126,7 @@ public class ContextSensitiveReachingDefs { * flow function from call node to return node at a call site when callees exist. We kill everything; surviving facts should * flow out of the callee */ + @Override public IUnaryFlowFunction getCallToReturnFlowFunction(BasicBlockInContext src, BasicBlockInContext dest) { return KillEverything.singleton(); @@ -130,6 +135,7 @@ public class ContextSensitiveReachingDefs { /** * flow function for normal intraprocedural edges */ + @Override public IUnaryFlowFunction getNormalFlowFunction(final BasicBlockInContext src, BasicBlockInContext dest) { final IExplodedBasicBlock ebb = src.getDelegate(); @@ -139,6 +145,7 @@ public class ContextSensitiveReachingDefs { if (putInstr.isStatic()) { return new IUnaryFlowFunction() { + @Override public IntSet getTargets(int d1) { // first, gen this statement int factNum = domain.getMappedIndex(Pair.make(src.getNode(), ebb.getFirstInstructionIndex())); @@ -159,6 +166,7 @@ public class ContextSensitiveReachingDefs { return result; } + @Override public String toString() { return "Reaching Defs Normal Flow"; } @@ -172,6 +180,7 @@ public class ContextSensitiveReachingDefs { /** * standard flow function from callee to caller; just identity */ + @Override public IFlowFunction getReturnFlowFunction(BasicBlockInContext call, BasicBlockInContext src, BasicBlockInContext dest) { return IdentityFlowFunction.identity(); @@ -202,6 +211,7 @@ public class ContextSensitiveReachingDefs { /** * we use the entry block of the CGNode as the fake entry when propagating from callee to caller with unbalanced parens */ + @Override public BasicBlockInContext getFakeEntry(BasicBlockInContext node) { final CGNode cgNode = node.getNode(); return getFakeEntry(cgNode); @@ -240,10 +250,12 @@ public class ContextSensitiveReachingDefs { return result; } + @Override public IPartiallyBalancedFlowFunctions> getFunctionMap() { return flowFunctions; } + @Override public TabulationDomain, BasicBlockInContext> getDomain() { return domain; } @@ -251,14 +263,17 @@ public class ContextSensitiveReachingDefs { /** * we don't need a merge function; the default unioning of tabulation works fine */ + @Override public IMergeFunction getMergeFunction() { return null; } + @Override public ISupergraph, CGNode> getSupergraph() { return supergraph; } + @Override public Collection>> initialSeeds() { return initialSeeds; } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/dataflow/IntraprocReachingDefs.java b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/dataflow/IntraprocReachingDefs.java index 8289746db..eca082f23 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/dataflow/IntraprocReachingDefs.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/dataflow/IntraprocReachingDefs.java @@ -103,6 +103,7 @@ public class IntraprocReachingDefs { private class TransferFunctions implements ITransferFunctionProvider { + @Override public UnaryOperator getEdgeTransferFunction(IExplodedBasicBlock src, IExplodedBasicBlock dst) { throw new UnsupportedOperationException(); } @@ -110,10 +111,12 @@ public class IntraprocReachingDefs { /** * our meet operator is set union */ + @Override public AbstractMeetOperator getMeetOperator() { return BitVectorUnion.instance(); } + @Override public UnaryOperator getNodeTransferFunction(IExplodedBasicBlock node) { SSAInstruction instruction = node.getInstruction(); int instructionIndex = node.getFirstInstructionIndex(); @@ -132,11 +135,13 @@ public class IntraprocReachingDefs { } } + @Override public boolean hasEdgeTransferFunctions() { // we only need transfer functions on nodes return false; } + @Override public boolean hasNodeTransferFunctions() { return true; } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFCallGraph.java b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFCallGraph.java index 8c7ea772a..05f6fef93 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFCallGraph.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFCallGraph.java @@ -196,6 +196,7 @@ public class PDFCallGraph { */ private static class ApplicationLoaderFilter implements Filter { + @Override public boolean accepts(CGNode o) { if (o instanceof CGNode) { CGNode n = (CGNode) o; diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFSDG.java b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFSDG.java index 48de77f93..cddb80c79 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFSDG.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFSDG.java @@ -162,6 +162,7 @@ public class PDFSDG { private static Graph pruneSDG(final SDG sdg) { Filter f = new Filter() { + @Override public boolean accepts(Statement o) { Statement s = (Statement) o; if (s.getNode().equals(sdg.getCallGraph().getFakeRootNode())) { @@ -178,6 +179,7 @@ public class PDFSDG { private static NodeDecorator makeNodeDecorator() { return new NodeDecorator() { + @Override public String getLabel(Object o) throws WalaException { Statement s = (Statement) o; switch (s.getKind()) { diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFSlice.java b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFSlice.java index c73e11cb3..0344a2b13 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFSlice.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFSlice.java @@ -245,6 +245,7 @@ public class PDFSlice { */ public static Graph pruneSDG(SDG sdg, final Collection slice) { Filter f = new Filter() { + @Override public boolean accepts(Statement o) { return slice.contains(o); } @@ -257,6 +258,7 @@ public class PDFSlice { */ public static NodeDecorator makeNodeDecorator() { return new NodeDecorator() { + @Override public String getLabel(Object o) throws WalaException { Statement s = (Statement) o; switch (s.getKind()) { diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFTypeHierarchy.java b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFTypeHierarchy.java index bbcb500ed..681042bd1 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFTypeHierarchy.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFTypeHierarchy.java @@ -103,6 +103,7 @@ public class PDFTypeHierarchy { */ public static Graph pruneForAppLoader(Graph g) throws WalaException { Filter f = new Filter() { + @Override public boolean accepts(IClass c) { return (c.getClassLoader().getReference().equals(ClassLoaderReference.Application)); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/BasicHeapGraph.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/BasicHeapGraph.java index 8dfdd02d8..4f2fa9cd5 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/BasicHeapGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/BasicHeapGraph.java @@ -76,22 +76,27 @@ public class BasicHeapGraph extends HeapGraph { final OrdinalSetMapping pointerKeys = getPointerKeys(); final NumberedNodeManager nodeMgr = new NumberedNodeManager() { + @Override public Iterator iterator() { return new CompoundIterator(pointerKeys.iterator(), P.getInstanceKeyMapping().iterator()); } + @Override public int getNumberOfNodes() { return pointerKeys.getSize() + P.getInstanceKeyMapping().getSize(); } + @Override public void addNode(Object n) { Assertions.UNREACHABLE(); } + @Override public void removeNode(Object n) { Assertions.UNREACHABLE(); } + @Override public int getNumber(Object N) { if (N instanceof PointerKey) { return pointerKeys.getMappedIndex((PointerKey) N); @@ -104,6 +109,7 @@ public class BasicHeapGraph extends HeapGraph { } } + @Override public Object getNode(int number) { if (number > pointerKeys.getMaximumIndex()) { return P.getInstanceKeyMapping().getMappedObject(number - pointerKeys.getSize()); @@ -112,14 +118,17 @@ public class BasicHeapGraph extends HeapGraph { } } + @Override public int getMaxNumber() { return getNumberOfNodes() - 1; } + @Override public boolean containsNode(Object n) { return getNumber(n) != -1; } + @Override public Iterator iterateNodes(IntSet s) { return new NumberedNodeIterator(s, this); } @@ -127,6 +136,7 @@ public class BasicHeapGraph extends HeapGraph { final IBinaryNaturalRelation pred = computePredecessors(nodeMgr); final IntFunction toNode = new IntFunction() { + @Override public Object apply(int i) { return nodeMgr.getNode(i); } @@ -134,6 +144,7 @@ public class BasicHeapGraph extends HeapGraph { this.G = new AbstractNumberedGraph() { private final NumberedEdgeManager edgeMgr = new NumberedEdgeManager() { + @Override public Iterator getPredNodes(Object N) { int n = nodeMgr.getNumber(N); IntSet p = pred.getRelated(n); @@ -144,6 +155,7 @@ public class BasicHeapGraph extends HeapGraph { } } + @Override public IntSet getPredNodeNumbers(Object N) { int n = nodeMgr.getNumber(N); IntSet p = pred.getRelated(n); @@ -154,11 +166,13 @@ public class BasicHeapGraph extends HeapGraph { } } + @Override public int getPredNodeCount(Object N) { int n = nodeMgr.getNumber(N); return pred.getRelatedCount(n); } + @Override public Iterator getSuccNodes(Object N) { int[] succ = computeSuccNodeNumbers(N, nodeMgr); if (succ == null) { @@ -168,6 +182,7 @@ public class BasicHeapGraph extends HeapGraph { return new IntMapIterator(s.intIterator(), toNode); } + @Override public IntSet getSuccNodeNumbers(Object N) { int[] succ = computeSuccNodeNumbers(N, nodeMgr); if (succ == null) { @@ -177,31 +192,38 @@ public class BasicHeapGraph extends HeapGraph { } } + @Override public int getSuccNodeCount(Object N) { int[] succ = computeSuccNodeNumbers(N, nodeMgr); return succ == null ? 0 : succ.length; } + @Override public void addEdge(Object src, Object dst) { Assertions.UNREACHABLE(); } + @Override public void removeEdge(Object src, Object dst) { Assertions.UNREACHABLE(); } + @Override public void removeAllIncidentEdges(Object node) { Assertions.UNREACHABLE(); } + @Override public void removeIncomingEdges(Object node) { Assertions.UNREACHABLE(); } + @Override public void removeOutgoingEdges(Object node) { Assertions.UNREACHABLE(); } + @Override public boolean hasEdge(Object src, Object dst) { Assertions.UNREACHABLE(); return false; @@ -354,6 +376,7 @@ public class BasicHeapGraph extends HeapGraph { * sorts local pointers by node, then value number */ private final class LocalPointerComparator implements Comparator { + @Override public int compare(Object arg1, Object arg2) { LocalPointerKey o1 = (LocalPointerKey) arg1; LocalPointerKey o2 = (LocalPointerKey) arg2; @@ -368,6 +391,7 @@ public class BasicHeapGraph extends HeapGraph { /* * @see com.ibm.wala.util.graph.NumberedNodeManager#getNumber(com.ibm.wala.util.graph.Node) */ + @Override public int getNumber(Object N) { return G.getNumber(N); } @@ -375,6 +399,7 @@ public class BasicHeapGraph extends HeapGraph { /* * @see com.ibm.wala.util.graph.NumberedNodeManager#getNode(int) */ + @Override public Object getNode(int number) { return G.getNode(number); } @@ -382,6 +407,7 @@ public class BasicHeapGraph extends HeapGraph { /* * @see com.ibm.wala.util.graph.NumberedNodeManager#getMaxNumber() */ + @Override public int getMaxNumber() { return G.getMaxNumber(); } @@ -389,6 +415,7 @@ public class BasicHeapGraph extends HeapGraph { /* * @see com.ibm.wala.util.graph.NodeManager#iterateNodes() */ + @Override public Iterator iterator() { return G.iterator(); } @@ -396,6 +423,7 @@ public class BasicHeapGraph extends HeapGraph { /* * @see com.ibm.wala.util.graph.NodeManager#getNumberOfNodes() */ + @Override public int getNumberOfNodes() { return G.getNumberOfNodes(); } @@ -403,6 +431,7 @@ public class BasicHeapGraph extends HeapGraph { /* * @see com.ibm.wala.util.graph.EdgeManager#getPredNodes(com.ibm.wala.util.graph.Node) */ + @Override public Iterator getPredNodes(Object N) { return G.getPredNodes(N); } @@ -410,6 +439,7 @@ public class BasicHeapGraph extends HeapGraph { /* * @see com.ibm.wala.util.graph.EdgeManager#getPredNodeCount(com.ibm.wala.util.graph.Node) */ + @Override public int getPredNodeCount(Object N) { return G.getPredNodeCount(N); } @@ -417,6 +447,7 @@ public class BasicHeapGraph extends HeapGraph { /* * @see com.ibm.wala.util.graph.EdgeManager#getSuccNodes(com.ibm.wala.util.graph.Node) */ + @Override public Iterator getSuccNodes(Object N) { return G.getSuccNodes(N); } @@ -424,6 +455,7 @@ public class BasicHeapGraph extends HeapGraph { /* * @see com.ibm.wala.util.graph.EdgeManager#getSuccNodeCount(com.ibm.wala.util.graph.Node) */ + @Override public int getSuccNodeCount(Object N) { return G.getSuccNodeCount(N); } @@ -431,6 +463,7 @@ public class BasicHeapGraph extends HeapGraph { /* * @see com.ibm.wala.util.graph.NodeManager#addNode(com.ibm.wala.util.graph.Node) */ + @Override public void addNode(Object n) throws UnimplementedError { Assertions.UNREACHABLE(); } @@ -438,23 +471,28 @@ public class BasicHeapGraph extends HeapGraph { /* * @see com.ibm.wala.util.graph.NodeManager#remove(com.ibm.wala.util.graph.Node) */ + @Override public void removeNode(Object n) throws UnimplementedError { Assertions.UNREACHABLE(); } + @Override public void addEdge(Object from, Object to) throws UnimplementedError { Assertions.UNREACHABLE(); } + @Override public void removeEdge(Object from, Object to) throws UnimplementedError { Assertions.UNREACHABLE(); } + @Override public boolean hasEdge(Object from, Object to) throws UnimplementedError { Assertions.UNREACHABLE(); return false; } + @Override public void removeAllIncidentEdges(Object node) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } @@ -462,6 +500,7 @@ public class BasicHeapGraph extends HeapGraph { /* * @see com.ibm.wala.util.graph.NodeManager#containsNode(com.ibm.wala.util.graph.Node) */ + @Override public boolean containsNode(Object N) { return G.containsNode(N); } @@ -492,19 +531,23 @@ public class BasicHeapGraph extends HeapGraph { return result.toString(); } + @Override public void removeIncomingEdges(Object node) throws UnimplementedError { Assertions.UNREACHABLE(); } + @Override public void removeOutgoingEdges(Object node) throws UnimplementedError { Assertions.UNREACHABLE(); } + @Override public IntSet getSuccNodeNumbers(Object node) throws UnimplementedError { Assertions.UNREACHABLE(); return null; } + @Override public IntSet getPredNodeNumbers(Object node) throws UnimplementedError { Assertions.UNREACHABLE(); return null; diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraph.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraph.java index 9b3b242ce..16c3c3c3d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraph.java @@ -46,12 +46,14 @@ public abstract class HeapGraph implements NumberedGraph { this.pa = pa; } + @Override public Iterator iterateNodes(IntSet s) { return new NumberedNodeIterator(s, this); } public Collection getReachableInstances(Set roots) { Filter f = new Filter() { + @Override public boolean accepts(Object o) { return (o instanceof InstanceKey); } @@ -59,6 +61,7 @@ public abstract class HeapGraph implements NumberedGraph { return DFS.getReachableNodes(this, roots, f); } + @Override public void removeNodeAndEdges(Object N) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassFactoryContextInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassFactoryContextInterpreter.java index 49ea6f3e3..7694616d1 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassFactoryContextInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassFactoryContextInterpreter.java @@ -44,6 +44,7 @@ public class ClassFactoryContextInterpreter implements SSAContextInterpreter { private static final boolean DEBUG = false; + @Override public IR getIR(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -56,6 +57,7 @@ public class ClassFactoryContextInterpreter implements SSAContextInterpreter { return result; } + @Override public int getNumberOfStatements(CGNode node) { assert understands(node); return getIR(node).getInstructions().length; @@ -64,6 +66,7 @@ public class ClassFactoryContextInterpreter implements SSAContextInterpreter { /* * @see com.ibm.wala.ipa.callgraph.propagation.rta.RTAContextInterpreter#understands(com.ibm.wala.ipa.callgraph.CGNode) */ + @Override public boolean understands(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -77,6 +80,7 @@ public class ClassFactoryContextInterpreter implements SSAContextInterpreter { /* * @see com.ibm.wala.ipa.callgraph.propagation.rta.RTAContextInterpreter#iterateNewSites(com.ibm.wala.ipa.callgraph.CGNode) */ + @Override public Iterator iterateNewSites(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -93,6 +97,7 @@ public class ClassFactoryContextInterpreter implements SSAContextInterpreter { /* * @see com.ibm.wala.ipa.callgraph.propagation.rta.RTAContextInterpreter#iterateCallSites(com.ibm.wala.ipa.callgraph.CGNode) */ + @Override public Iterator iterateCallSites(CGNode node) { assert understands(node); return EmptyIterator.instance(); @@ -123,22 +128,27 @@ public class ClassFactoryContextInterpreter implements SSAContextInterpreter { return new SyntheticIR(method, context, new InducedCFG(instrs, method, context), instrs, SSAOptions.defaultOptions(), null); } + @Override public boolean recordFactoryType(CGNode node, IClass klass) { return false; } + @Override public Iterator iterateFieldsRead(CGNode node) { return EmptyIterator.instance(); } + @Override public Iterator iterateFieldsWritten(CGNode node) { return EmptyIterator.instance(); } + @Override public ControlFlowGraph getCFG(CGNode N) { return getIR(N).getControlFlowGraph(); } + @Override public DefUse getDU(CGNode node) { return new DefUse(getIR(node)); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassFactoryContextSelector.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassFactoryContextSelector.java index dc6df81f0..f9a3f2034 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassFactoryContextSelector.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassFactoryContextSelector.java @@ -84,6 +84,7 @@ class ClassFactoryContextSelector implements ContextSelector { * com.ibm.wala.classLoader.CallSiteReference, com.ibm.wala.classLoader.IMethod, * InstanceKey[]) */ + @Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { if (isClassFactory(callee.getReference())) { IR ir = caller.getIR(); @@ -110,6 +111,7 @@ class ClassFactoryContextSelector implements ContextSelector { private static final IntSet firstParameter = IntSetUtil.make(new int[]{1}); + @Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { if (isClassFactory(site.getDeclaredTarget())) { SSAAbstractInvokeInstruction[] invokeInstructions = caller.getIR().getCalls(site); diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassNewInstanceContextInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassNewInstanceContextInterpreter.java index ddfce7790..903cf5689 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassNewInstanceContextInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassNewInstanceContextInterpreter.java @@ -63,6 +63,7 @@ public class ClassNewInstanceContextInterpreter extends AbstractReflectionInterp this.cha = cha; } + @Override public IR getIR(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -75,11 +76,13 @@ public class ClassNewInstanceContextInterpreter extends AbstractReflectionInterp return result; } + @Override public int getNumberOfStatements(CGNode node) { assert understands(node); return getIR(node).getInstructions().length; } + @Override public boolean understands(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -90,6 +93,7 @@ public class ClassNewInstanceContextInterpreter extends AbstractReflectionInterp return node.getMethod().getReference().equals(CLASS_NEW_INSTANCE_REF); } + @Override public Iterator iterateNewSites(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -103,6 +107,7 @@ public class ClassNewInstanceContextInterpreter extends AbstractReflectionInterp return EmptyIterator.instance(); } + @Override public Iterator iterateCallSites(CGNode node) { assert understands(node); return EmptyIterator.instance(); @@ -151,22 +156,27 @@ public class ClassNewInstanceContextInterpreter extends AbstractReflectionInterp return null; } + @Override public boolean recordFactoryType(CGNode node, IClass klass) { return false; } + @Override public Iterator iterateFieldsRead(CGNode node) { return EmptyIterator.instance(); } + @Override public Iterator iterateFieldsWritten(CGNode node) { return EmptyIterator.instance(); } + @Override public ControlFlowGraph getCFG(CGNode N) { return getIR(N).getControlFlowGraph(); } + @Override public DefUse getDU(CGNode node) { return new DefUse(getIR(node)); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassNewInstanceContextSelector.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassNewInstanceContextSelector.java index f2f84eeb8..0440987c3 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassNewInstanceContextSelector.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassNewInstanceContextSelector.java @@ -36,6 +36,7 @@ class ClassNewInstanceContextSelector implements ContextSelector { * representing the type of the IClass. (This corresponds to the case where we know the exact type that will be * allocated by the Class.newInstance() call.) Otherwise, return null. */ + @Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { if (callee.getReference().equals(ClassNewInstanceContextInterpreter.CLASS_NEW_INSTANCE_REF) && isTypeConstant(receiver[0])) { IClass c = (IClass) ((ConstantKey) receiver[0]).getValue(); @@ -58,6 +59,7 @@ class ClassNewInstanceContextSelector implements ContextSelector { private static final IntSet thisParameter = IntSetUtil.make(new int[]{0}); + @Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { if (site.isDispatch() || site.getDeclaredTarget().getNumberOfParameters() > 0) { return thisParameter; diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/CloneInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/CloneInterpreter.java index c2c122c2a..ce981a62b 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/CloneInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/CloneInterpreter.java @@ -99,6 +99,7 @@ public class CloneInterpreter implements SSAContextInterpreter { private final SSAInstructionFactory insts = Language.JAVA.instructionFactory(); + @Override public IR getIR(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -113,11 +114,13 @@ public class CloneInterpreter implements SSAContextInterpreter { return result; } + @Override public int getNumberOfStatements(CGNode node) { assert understands(node); return getIR(node).getInstructions().length; } + @Override public boolean understands(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -125,6 +128,7 @@ public class CloneInterpreter implements SSAContextInterpreter { return (node.getMethod().getReference().equals(CLONE) && ContextUtil.getConcreteClassFromContext(node.getContext()) != null); } + @Override public Iterator iterateNewSites(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -134,6 +138,7 @@ public class CloneInterpreter implements SSAContextInterpreter { return new NonNullSingletonIterator(NewSiteReference.make(NEW_PC, cls.getReference())); } + @Override public Iterator iterateCallSites(CGNode node) { assert understands(node); return new NonNullSingletonIterator(ARRAYCOPY_SITE); @@ -215,15 +220,18 @@ public class CloneInterpreter implements SSAContextInterpreter { * @see com.ibm.wala.ipa.callgraph.propagation.cfa.CFAContextInterpreter#recordFactoryType(com.ibm.wala.ipa.callgraph.CGNode, * com.ibm.wala.classLoader.IClass) */ + @Override public boolean recordFactoryType(CGNode node, IClass klass) { return false; } + @Override public Iterator iterateFieldsRead(CGNode node) { SSAInstruction[] statements = getIR(node).getInstructions(); return CodeScanner.getFieldsRead(statements).iterator(); } + @Override public Iterator iterateFieldsWritten(CGNode node) { SSAInstruction[] statements = getIR(node).getInstructions(); return CodeScanner.getFieldsWritten(statements).iterator(); @@ -249,10 +257,12 @@ public class CloneInterpreter implements SSAContextInterpreter { return CodeScanner.iterateCastTypes(statements); } + @Override public ControlFlowGraph getCFG(CGNode N) { return getIR(N).getControlFlowGraph(); } + @Override public DefUse getDU(CGNode node) { return new DefUse(getIR(node)); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java index 3abd8382b..e5319f9cc 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java @@ -82,6 +82,7 @@ class FactoryBypassInterpreter extends AbstractReflectionInterpreter { this.cache = cache; } + @Override public IR getIR(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -115,6 +116,7 @@ class FactoryBypassInterpreter extends AbstractReflectionInterpreter { /* * @see com.ibm.wala.ipa.callgraph.propagation.SSAContextInterpreter#getNumberOfStatements(com.ibm.wala.ipa.callgraph.CGNode) */ + @Override public int getNumberOfStatements(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -127,6 +129,7 @@ class FactoryBypassInterpreter extends AbstractReflectionInterpreter { * @see com.ibm.wala.ipa.callgraph.rta.RTAContextInterpreter#understands(com.ibm.wala.classLoader.IMethod, * com.ibm.wala.ipa.callgraph.Context) */ + @Override public boolean understands(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -141,6 +144,7 @@ class FactoryBypassInterpreter extends AbstractReflectionInterpreter { } + @Override public Iterator iterateNewSites(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -162,18 +166,22 @@ class FactoryBypassInterpreter extends AbstractReflectionInterpreter { return m.getInvokeStatements().iterator(); } + @Override public Iterator iterateCallSites(CGNode node) { final Iterator I = getInvokeStatements(node); return new Iterator() { + @Override public boolean hasNext() { return I.hasNext(); } + @Override public CallSiteReference next() { SSAInvokeInstruction s = (SSAInvokeInstruction) I.next(); return s.getCallSite(); } + @Override public void remove() { Assertions.UNREACHABLE(); } @@ -205,6 +213,7 @@ class FactoryBypassInterpreter extends AbstractReflectionInterpreter { * @see com.ibm.wala.ipa.callgraph.propagation.rta.RTAContextInterpreter#recordFactoryType(com.ibm.wala.ipa.callgraph.CGNode, * com.ibm.wala.classLoader.IClass) */ + @Override public boolean recordFactoryType(CGNode node, IClass klass) { if (klass == null) { throw new IllegalArgumentException("klass is null"); @@ -215,6 +224,7 @@ class FactoryBypassInterpreter extends AbstractReflectionInterpreter { return recordType(node.getMethod().getClassHierarchy(), node.getContext(), klass.getReference()); } + @Override public Iterator iterateFieldsRead(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -229,6 +239,7 @@ class FactoryBypassInterpreter extends AbstractReflectionInterpreter { } } + @Override public Iterator iterateFieldsWritten(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -312,10 +323,12 @@ class FactoryBypassInterpreter extends AbstractReflectionInterpreter { /* * @see com.ibm.wala.ipa.callgraph.propagation.SSAContextInterpreter#getCFG(com.ibm.wala.ipa.callgraph.CGNode) */ + @Override public ControlFlowGraph getCFG(CGNode N) { return getIR(N).getControlFlowGraph(); } + @Override public DefUse getDU(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryContextSelector.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryContextSelector.java index 0d2f04599..a02807a76 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryContextSelector.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryContextSelector.java @@ -33,6 +33,7 @@ class FactoryContextSelector implements ContextSelector { /* * @see com.ibm.wala.ipa.callgraph.ContextSelector#getCalleeTarget(com.ibm.wala.ipa.callgraph.CGNode, com.ibm.wala.classLoader.CallSiteReference, com.ibm.wala.classLoader.IMethod) */ + @Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { if (callee == null) { throw new IllegalArgumentException("callee is null"); @@ -46,6 +47,7 @@ class FactoryContextSelector implements ContextSelector { return null; } + @Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { return EmptyIntSet.instance; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/GetClassContextInterpeter.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/GetClassContextInterpeter.java index b03758c46..fe56373ce 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/GetClassContextInterpeter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/GetClassContextInterpeter.java @@ -41,6 +41,7 @@ public class GetClassContextInterpeter implements SSAContextInterpreter { private static final boolean DEBUG = false; + @Override public IR getIR(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -53,11 +54,13 @@ public class GetClassContextInterpeter implements SSAContextInterpreter { return result; } + @Override public int getNumberOfStatements(CGNode node) { assert understands(node); return getIR(node).getInstructions().length; } + @Override public boolean understands(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -68,10 +71,12 @@ public class GetClassContextInterpeter implements SSAContextInterpreter { return node.getMethod().getReference().equals(GetClassContextSelector.GET_CLASS); } + @Override public Iterator iterateNewSites(CGNode node) { return EmptyIterator.instance(); } + @Override public Iterator iterateCallSites(CGNode node) { return EmptyIterator.instance(); } @@ -101,22 +106,27 @@ public class GetClassContextInterpeter implements SSAContextInterpreter { return new SyntheticIR(method, context, new InducedCFG(instrs, method, context), instrs, SSAOptions.defaultOptions(), null); } + @Override public boolean recordFactoryType(CGNode node, IClass klass) { return false; } + @Override public Iterator iterateFieldsRead(CGNode node) { return EmptyIterator.instance(); } + @Override public Iterator iterateFieldsWritten(CGNode node) { return EmptyIterator.instance(); } + @Override public ControlFlowGraph getCFG(CGNode N) { return getIR(N).getControlFlowGraph(); } + @Override public DefUse getDU(CGNode node) { return new DefUse(getIR(node)); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/GetClassContextSelector.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/GetClassContextSelector.java index 694e00542..558777805 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/GetClassContextSelector.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/GetClassContextSelector.java @@ -39,6 +39,7 @@ class GetClassContextSelector implements ContextSelector { * com.ibm.wala.classLoader.CallSiteReference, com.ibm.wala.classLoader.IMethod, * com.ibm.wala.ipa.callgraph.propagation.InstanceKey) */ + @Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { if (callee.getReference().equals(GET_CLASS)) { return new JavaTypeContext(new PointType(receiver[0].getConcreteType())); @@ -48,6 +49,7 @@ class GetClassContextSelector implements ContextSelector { private static final IntSet thisParameter = IntSetUtil.make(new int[]{0}); + @Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { if (site.isDispatch() || site.getDeclaredTarget().getNumberOfParameters() > 0) { return thisParameter; diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/IllegalArgumentExceptionContext.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/IllegalArgumentExceptionContext.java index 6049a6ff3..292c5469c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/IllegalArgumentExceptionContext.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/IllegalArgumentExceptionContext.java @@ -17,6 +17,7 @@ import com.ibm.wala.ipa.callgraph.ContextKey; public class IllegalArgumentExceptionContext implements Context { + @Override public ContextItem get(ContextKey name) { return null; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/JavaLangClassContextInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/JavaLangClassContextInterpreter.java index 70481fb3b..d06fc05d7 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/JavaLangClassContextInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/JavaLangClassContextInterpreter.java @@ -90,6 +90,7 @@ public class JavaLangClassContextInterpreter implements SSAContextInterpreter { /* * @see com.ibm.wala.ipa.callgraph.propagation.SSAContextInterpreter#getIR(com.ibm.wala.ipa.callgraph.CGNode) */ + @Override public IR getIR(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -148,6 +149,7 @@ public class JavaLangClassContextInterpreter implements SSAContextInterpreter { /* * @see com.ibm.wala.ipa.callgraph.propagation.SSAContextInterpreter#getNumberOfStatements(com.ibm.wala.ipa.callgraph.CGNode) */ + @Override public int getNumberOfStatements(CGNode node) { assert understands(node); return getIR(node).getInstructions().length; @@ -156,6 +158,7 @@ public class JavaLangClassContextInterpreter implements SSAContextInterpreter { /* * @see com.ibm.wala.ipa.callgraph.propagation.rta.RTAContextInterpreter#understands(com.ibm.wala.ipa.callgraph.CGNode) */ + @Override public boolean understands(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -169,6 +172,7 @@ public class JavaLangClassContextInterpreter implements SSAContextInterpreter { || mRef.equals(GET_DECLARED_METHODS); } + @Override public Iterator iterateNewSites(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -182,6 +186,7 @@ public class JavaLangClassContextInterpreter implements SSAContextInterpreter { return EmptyIterator.instance(); } + @Override public Iterator iterateCallSites(CGNode node) { assert understands(node); return EmptyIterator.instance(); @@ -404,22 +409,27 @@ public class JavaLangClassContextInterpreter implements SSAContextInterpreter { } } + @Override public boolean recordFactoryType(CGNode node, IClass klass) { return false; } + @Override public Iterator iterateFieldsRead(CGNode node) { return EmptyIterator.instance(); } + @Override public Iterator iterateFieldsWritten(CGNode node) { return EmptyIterator.instance(); } + @Override public ControlFlowGraph getCFG(CGNode N) { return getIR(N).getControlFlowGraph(); } + @Override public DefUse getDU(CGNode node) { return new DefUse(getIR(node)); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/JavaLangClassContextSelector.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/JavaLangClassContextSelector.java index e81d61a80..a03fa0217 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/JavaLangClassContextSelector.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/JavaLangClassContextSelector.java @@ -48,6 +48,7 @@ class JavaLangClassContextSelector implements ContextSelector { * If the {@link CallSiteReference} invokes a method we understand and c is a type constant, return a {@link JavaTypeContext} * representing the type named by s, if we can resolve it in the {@link IClassHierarchy}. */ + @Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { if (receiver != null && receiver.length > 0 && mayUnderstand(caller, site, callee, receiver[0])) { return new JavaTypeContext(new PointType(getTypeConstant(receiver[0]))); @@ -87,6 +88,7 @@ class JavaLangClassContextSelector implements ContextSelector { private static final IntSet thisParameter = IntSetUtil.make(new int[]{0}); + @Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { if (site.isDispatch() || site.getDeclaredTarget().getNumberOfParameters() > 0) { return thisParameter; diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/JavaTypeContext.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/JavaTypeContext.java index 93cae38b1..b7b861b1c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/JavaTypeContext.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/JavaTypeContext.java @@ -32,6 +32,7 @@ public class JavaTypeContext implements Context { this.type = type; } + @Override public ContextItem get(ContextKey name) { if (name == ContextKey.RECEIVER) { return type; diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ReflectionContextInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ReflectionContextInterpreter.java index 86b972a07..dda789e34 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ReflectionContextInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ReflectionContextInterpreter.java @@ -42,50 +42,60 @@ public class ReflectionContextInterpreter { // start with a dummy interpreter that understands nothing SSAContextInterpreter result = new SSAContextInterpreter() { + @Override public boolean understands(CGNode node) { return false; } + @Override public boolean recordFactoryType(CGNode node, IClass klass) { // TODO Auto-generated method stub return false; } + @Override public Iterator iterateNewSites(CGNode node) { // TODO Auto-generated method stub return null; } + @Override public Iterator iterateFieldsWritten(CGNode node) { // TODO Auto-generated method stub return null; } + @Override public Iterator iterateFieldsRead(CGNode node) { // TODO Auto-generated method stub return null; } + @Override public Iterator iterateCallSites(CGNode node) { // TODO Auto-generated method stub return null; } + @Override public int getNumberOfStatements(CGNode node) { // TODO Auto-generated method stub return 0; } + @Override public IR getIR(CGNode node) { // TODO Auto-generated method stub return null; } + @Override public DefUse getDU(CGNode node) { // TODO Auto-generated method stub return null; } + @Override public ControlFlowGraph getCFG(CGNode n) { // TODO Auto-generated method stub return null; diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ReflectionContextSelector.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ReflectionContextSelector.java index c9f856e80..5b64a80ee 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ReflectionContextSelector.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ReflectionContextSelector.java @@ -34,9 +34,11 @@ public class ReflectionContextSelector { // start with a dummy ContextSelector result = new ContextSelector() { + @Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { return null; } + @Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { return EmptyIntSet.instance; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ReflectiveInvocationInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ReflectiveInvocationInterpreter.java index 0568d7bfc..1371e6934 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ReflectiveInvocationInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ReflectiveInvocationInterpreter.java @@ -55,6 +55,7 @@ public class ReflectiveInvocationInterpreter extends AbstractReflectionInterpret /* * @see com.ibm.wala.ipa.callgraph.propagation.SSAContextInterpreter#getIR(com.ibm.wala.ipa.callgraph.CGNode) */ + @Override public IR getIR(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -73,6 +74,7 @@ public class ReflectiveInvocationInterpreter extends AbstractReflectionInterpret /* * @see com.ibm.wala.ipa.callgraph.propagation.SSAContextInterpreter#getNumberOfStatements(com.ibm.wala.ipa.callgraph.CGNode) */ + @Override public int getNumberOfStatements(CGNode node) { assert understands(node); return getIR(node).getInstructions().length; @@ -81,6 +83,7 @@ public class ReflectiveInvocationInterpreter extends AbstractReflectionInterpret /* * @see com.ibm.wala.ipa.callgraph.propagation.rta.RTAContextInterpreter#understands(com.ibm.wala.ipa.callgraph.CGNode) */ + @Override public boolean understands(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -98,6 +101,7 @@ public class ReflectiveInvocationInterpreter extends AbstractReflectionInterpret /* * @see com.ibm.wala.ipa.callgraph.propagation.rta.RTAContextInterpreter#iterateNewSites(com.ibm.wala.ipa.callgraph.CGNode) */ + @Override public Iterator iterateNewSites(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -109,6 +113,7 @@ public class ReflectiveInvocationInterpreter extends AbstractReflectionInterpret /* * @see com.ibm.wala.ipa.callgraph.propagation.rta.RTAContextInterpreter#iterateCallSites(com.ibm.wala.ipa.callgraph.CGNode) */ + @Override public Iterator iterateCallSites(CGNode node) { assert understands(node); return getIR(node).iterateCallSites(); @@ -202,22 +207,27 @@ public class ReflectiveInvocationInterpreter extends AbstractReflectionInterpret return new SyntheticIR(method, context, new InducedCFG(instrs, method, context), instrs, SSAOptions.defaultOptions(), constants); } + @Override public boolean recordFactoryType(CGNode node, IClass klass) { return false; } + @Override public Iterator iterateFieldsRead(CGNode node) { return EmptyIterator.instance(); } + @Override public Iterator iterateFieldsWritten(CGNode node) { return EmptyIterator.instance(); } + @Override public ControlFlowGraph getCFG(CGNode N) { return getIR(N).getControlFlowGraph(); } + @Override public DefUse getDU(CGNode node) { return new DefUse(getIR(node)); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ReflectiveInvocationSelector.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ReflectiveInvocationSelector.java index dc3426cee..72aedf89f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ReflectiveInvocationSelector.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ReflectiveInvocationSelector.java @@ -47,6 +47,7 @@ class ReflectiveInvocationSelector implements ContextSelector { *
  • Otherwise, return a new {@link ReceiverInstanceContext} for receiver. * */ + @Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { if (receiver == null || receiver.length == 0 || !mayUnderstand(caller, site, callee, receiver[0])) { return null; @@ -126,6 +127,7 @@ class ReflectiveInvocationSelector implements ContextSelector { private static final IntSet thisParameter = IntSetUtil.make(new int[]{0}); + @Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { if (site.isDispatch() || site.getDeclaredTarget().getNumberOfParameters() > 0) { return thisParameter; diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/stackMachine/AbstractIntStackMachine.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/stackMachine/AbstractIntStackMachine.java index 316ac6cc1..1e5700fe1 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/stackMachine/AbstractIntStackMachine.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/stackMachine/AbstractIntStackMachine.java @@ -100,14 +100,17 @@ public abstract class AbstractIntStackMachine implements FixedPointConstants { protected void init(Meeter meeter, final FlowProvider flow) { final MeetOperator meet = new MeetOperator(meeter); ITransferFunctionProvider xferFunctions = new ITransferFunctionProvider() { + @Override public boolean hasNodeTransferFunctions() { return flow.needsNodeFlow(); } + @Override public boolean hasEdgeTransferFunctions() { return flow.needsEdgeFlow(); } + @Override public UnaryOperator getNodeTransferFunction(final BasicBlock node) { return new UnaryOperator() { @Override @@ -142,6 +145,7 @@ public abstract class AbstractIntStackMachine implements FixedPointConstants { }; } + @Override public UnaryOperator getEdgeTransferFunction(final BasicBlock from, final BasicBlock to) { return new UnaryOperator() { @Override @@ -176,6 +180,7 @@ public abstract class AbstractIntStackMachine implements FixedPointConstants { }; } + @Override public AbstractMeetOperator getMeetOperator() { return meet; } @@ -717,6 +722,7 @@ public abstract class AbstractIntStackMachine implements FixedPointConstants { return result; } + @Override public void copyState(MachineState other) { if (other.stack == null) { stack = null; @@ -834,14 +840,17 @@ public abstract class AbstractIntStackMachine implements FixedPointConstants { this.edgeVisitor = ev; } + @Override public boolean needsNodeFlow() { return true; } + @Override public boolean needsEdgeFlow() { return false; } + @Override public MachineState flow(MachineState entry, BasicBlock basicBlock) { workingState = entry.duplicate(); currentBlock = basicBlock; @@ -861,6 +870,7 @@ public abstract class AbstractIntStackMachine implements FixedPointConstants { return workingState; } + @Override public MachineState flow(MachineState entry, BasicBlock from, BasicBlock to) { workingState = entry.duplicate(); currentBlock = from; diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/TypeInference.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/TypeInference.java index 47e9c39ca..7c551947c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/TypeInference.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/TypeInference.java @@ -505,6 +505,7 @@ public class TypeInference extends SSAInference implements FixedPo protected AbstractOperator result = null; + @Override public AbstractOperator get(SSAInstruction instruction) { instruction.visit(this); AbstractOperator temp = result; @@ -705,15 +706,18 @@ public class TypeInference extends SSAInference implements FixedPo } } + @Override public void visitAddressOf(SSAAddressOfInstruction instruction) { TypeReference type = language.getPointerType(instruction.getType()); result = getPointerTypeOperator(type); } + @Override public void visitLoadIndirect(SSALoadIndirectInstruction instruction) { result = getPointerTypeOperator(instruction.getLoadedType()); } + @Override public void visitStoreIndirect(SSAStoreIndirectInstruction instruction) { Assertions.UNREACHABLE(); } @@ -721,6 +725,7 @@ public class TypeInference extends SSAInference implements FixedPo public class TypeVarFactory implements VariableFactory { + @Override public IVariable makeVariable(int valueNumber) { SymbolTable st = ir.getSymbolTable(); if (doPrimitives) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/TypeVariable.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/TypeVariable.java index 2a32b021c..0571f737c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/TypeVariable.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/TypeVariable.java @@ -28,6 +28,7 @@ public class TypeVariable extends AbstractVariable { this.type = type; } + @Override public void copyState(TypeVariable other) throws IllegalArgumentException { if (other == null) { throw new IllegalArgumentException("v == null"); diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/AbstractCFG.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/AbstractCFG.java index 1c91efa72..113a5abf5 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/AbstractCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/AbstractCFG.java @@ -121,6 +121,7 @@ public abstract class AbstractCFG> implements Contro /** * Return the entry basic block for the CFG. */ + @Override public T entry() { return getNode(0); } @@ -128,10 +129,12 @@ public abstract class AbstractCFG> implements Contro /** * Return the exit basic block for the CFG. */ + @Override public T exit() { return exit; } + @Override public int getPredNodeCount(T N) { if (N == null) { throw new IllegalArgumentException("N is null"); @@ -218,6 +221,7 @@ public abstract class AbstractCFG> implements Contro return getNumberOfExceptionalOut(getNumber(N)); } + @Override public Iterator getPredNodes(T N) { if (N == null) { throw new IllegalArgumentException("N is null"); @@ -261,6 +265,7 @@ public abstract class AbstractCFG> implements Contro } } + @Override public int getSuccNodeCount(T N) { if (N == null) { throw new IllegalArgumentException("N is null"); @@ -299,6 +304,7 @@ public abstract class AbstractCFG> implements Contro return Iterator2Collection.toSet(getSuccNodes(N)).size(); } + @Override public Iterator getSuccNodes(T N) { int number = getNumber(N); if (normalToExit.get(number) && exceptionalToExit.get(number)) { @@ -392,38 +398,47 @@ public abstract class AbstractCFG> implements Contro /** * @param n */ + @Override public void addNode(T n) { nodeManager.addNode(n); } + @Override public int getMaxNumber() { return nodeManager.getMaxNumber(); } + @Override public T getNode(int number) { return nodeManager.getNode(number); } + @Override public int getNumber(T N) { return nodeManager.getNumber(N); } + @Override public int getNumberOfNodes() { return nodeManager.getNumberOfNodes(); } + @Override public Iterator iterator() { return nodeManager.iterator(); } + @Override public void addEdge(T src, T dst) throws UnimplementedError { Assertions.UNREACHABLE("Don't call me .. use addNormalEdge or addExceptionalEdge"); } + @Override public void removeEdge(T src, T dst) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } + @Override public boolean hasEdge(T src, T dst) { if (dst == null) { throw new IllegalArgumentException("dst is null"); @@ -507,6 +522,7 @@ public abstract class AbstractCFG> implements Contro /* * @see com.ibm.wala.util.graph.Graph#removeNode(com.ibm.wala.util.graph.Node) */ + @Override public void removeNodeAndEdges(T N) throws UnimplementedError { Assertions.UNREACHABLE(); } @@ -514,6 +530,7 @@ public abstract class AbstractCFG> implements Contro /* * @see com.ibm.wala.util.graph.NodeManager#remove(com.ibm.wala.util.graph.Node) */ + @Override public void removeNode(T n) throws UnimplementedError { Assertions.UNREACHABLE(); } @@ -521,6 +538,7 @@ public abstract class AbstractCFG> implements Contro /* * @see com.ibm.wala.util.graph.NodeManager#containsNode(com.ibm.wala.util.graph.Node) */ + @Override public boolean containsNode(T N) { return nodeManager.containsNode(N); } @@ -557,10 +575,12 @@ public abstract class AbstractCFG> implements Contro /** * Returns the catchBlocks. */ + @Override public BitVector getCatchBlocks() { return catchBlocks; } + @Override public IMethod getMethod() { return method; } @@ -568,6 +588,7 @@ public abstract class AbstractCFG> implements Contro /* * @see com.ibm.wala.util.graph.EdgeManager#removeEdges(java.lang.Object) */ + @Override public void removeAllIncidentEdges(T node) throws UnimplementedError { Assertions.UNREACHABLE(); } @@ -575,6 +596,7 @@ public abstract class AbstractCFG> implements Contro /* * @see com.ibm.wala.cfg.ControlFlowGraph#getExceptionalSuccessors(com.ibm.wala.cfg.T) */ + @Override public List getExceptionalSuccessors(T b) { if (b == null) { throw new IllegalArgumentException("b is null"); @@ -589,6 +611,7 @@ public abstract class AbstractCFG> implements Contro /* * @see com.ibm.wala.cfg.ControlFlowGraph#getNormalSuccessors(com.ibm.wala.cfg.T) */ + @Override public Collection getNormalSuccessors(T b) { if (b == null) { throw new IllegalArgumentException("b is null"); @@ -599,14 +622,17 @@ public abstract class AbstractCFG> implements Contro /* * @see com.ibm.wala.util.graph.NumberedNodeManager#iterateNodes(com.ibm.wala.util.intset.IntSet) */ + @Override public Iterator iterateNodes(IntSet s) { return new NumberedNodeIterator(s, this); } + @Override public void removeIncomingEdges(T node) throws UnimplementedError { Assertions.UNREACHABLE(); } + @Override public void removeOutgoingEdges(T node) throws UnimplementedError { Assertions.UNREACHABLE(); } @@ -622,6 +648,7 @@ public abstract class AbstractCFG> implements Contro /* * @see com.ibm.wala.cfg.ControlFlowGraph#getExceptionalPredecessors(com.ibm.wala.cfg.T) */ + @Override public Collection getExceptionalPredecessors(T b) { if (b == null) { throw new IllegalArgumentException("b is null"); @@ -632,6 +659,7 @@ public abstract class AbstractCFG> implements Contro /* * @see com.ibm.wala.cfg.ControlFlowGraph#getNormalPredecessors(com.ibm.wala.cfg.T) */ + @Override public Collection getNormalPredecessors(T b) { if (b == null) { throw new IllegalArgumentException("b is null"); @@ -639,6 +667,7 @@ public abstract class AbstractCFG> implements Contro return Iterator2Collection.toSet(iterateNormalPredecessors(b)); } + @Override public IntSet getPredNodeNumbers(T node) throws UnimplementedError { Assertions.UNREACHABLE(); return null; @@ -647,6 +676,7 @@ public abstract class AbstractCFG> implements Contro /* * TODO: optimize this. */ + @Override public IntSet getSuccNodeNumbers(T node) { int number = getNumber(node); IntSet s = normalEdgeManager.getSuccNodeNumbers(node); diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/InducedCFG.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/InducedCFG.java index 9dfac2f80..26d7c8a86 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/InducedCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/InducedCFG.java @@ -111,6 +111,7 @@ public class InducedCFG extends AbstractCFG iterator() { return new ArrayIterator(getInstructions(), getFirstInstructionIndex(), getLastInstructionIndex()); } @@ -580,6 +590,7 @@ public class InducedCFG extends AbstractCFG { return (o instanceof ShrikeCFG) && getMethod().equals(((ShrikeCFG) o).getMethod()); } + @Override public IInstruction[] getInstructions() { try { return method.getInstructions(); @@ -216,6 +217,7 @@ public class ShrikeCFG extends AbstractCFG { /** * Return an instruction's basic block in the CFG given the index of the instruction in the CFG's instruction array. */ + @Override public BasicBlock getBlockForInstruction(int index) { return getNode(instruction2Block[index]); } @@ -231,6 +233,7 @@ public class ShrikeCFG extends AbstractCFG { this.startIndex = startIndex; } + @Override public boolean isCatchBlock() { return ShrikeCFG.this.isCatchBlock(getNumber()); } @@ -421,6 +424,7 @@ public class ShrikeCFG extends AbstractCFG { addExceptionalEdge(this, b); } + @Override public int getLastInstructionIndex() { if (this == entry() || this == exit()) { // these are the special end blocks @@ -439,6 +443,7 @@ public class ShrikeCFG extends AbstractCFG { } } + @Override public int getFirstInstructionIndex() { return startIndex; } @@ -451,6 +456,7 @@ public class ShrikeCFG extends AbstractCFG { /* * @see com.ibm.wala.cfg.BasicBlock#isExitBlock() */ + @Override public boolean isExitBlock() { return this == ShrikeCFG.this.exit(); } @@ -458,6 +464,7 @@ public class ShrikeCFG extends AbstractCFG { /* * @see com.ibm.wala.cfg.BasicBlock#isEntryBlock() */ + @Override public boolean isEntryBlock() { return this == ShrikeCFG.this.entry(); } @@ -465,6 +472,7 @@ public class ShrikeCFG extends AbstractCFG { /* * @see com.ibm.wala.cfg.BasicBlock#getMethod() */ + @Override public IMethod getMethod() { return ShrikeCFG.this.getMethod(); } @@ -483,10 +491,12 @@ public class ShrikeCFG extends AbstractCFG { /* * @see com.ibm.wala.cfg.BasicBlock#getNumber() */ + @Override public int getNumber() { return getGraphNodeId(); } + @Override public Iterator iterator() { return new ArrayIterator(getInstructions(), getFirstInstructionIndex(), getLastInstructionIndex()); } @@ -517,6 +527,7 @@ public class ShrikeCFG extends AbstractCFG { /* * @see com.ibm.wala.cfg.ControlFlowGraph#getProgramCounter(int) */ + @Override public int getProgramCounter(int index) { try { return method.getBytecodeIndex(index); diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/cdg/ControlDependenceGraph.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/cdg/ControlDependenceGraph.java index ead3feea4..dc749fbbe 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/cdg/ControlDependenceGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/cdg/ControlDependenceGraph.java @@ -114,6 +114,7 @@ public class ControlDependenceGraph> extends Abstrac } } + @Override public Iterator getPredNodes(T N) { if (backwardEdges.containsKey(N)) return backwardEdges.get(N).iterator(); @@ -121,6 +122,7 @@ public class ControlDependenceGraph> extends Abstrac return EmptyIterator.instance(); } + @Override public IntSet getPredNodeNumbers(T node) { MutableIntSet x = IntSetUtil.make(); if (backwardEdges.containsKey(node)) { @@ -131,6 +133,7 @@ public class ControlDependenceGraph> extends Abstrac return x; } + @Override public int getPredNodeCount(T N) { if (backwardEdges.containsKey(N)) return ((Set) backwardEdges.get(N)).size(); @@ -138,6 +141,7 @@ public class ControlDependenceGraph> extends Abstrac return 0; } + @Override public Iterator getSuccNodes(T N) { if (forwardEdges.containsKey(N)) return forwardEdges.get(N).iterator(); @@ -145,6 +149,7 @@ public class ControlDependenceGraph> extends Abstrac return EmptyIterator.instance(); } + @Override public IntSet getSuccNodeNumbers(T node) { MutableIntSet x = IntSetUtil.make(); if (forwardEdges.containsKey(node)) { @@ -155,6 +160,7 @@ public class ControlDependenceGraph> extends Abstrac return x; } + @Override public int getSuccNodeCount(T N) { if (forwardEdges.containsKey(N)) return ((Set) forwardEdges.get(N)).size(); @@ -162,26 +168,32 @@ public class ControlDependenceGraph> extends Abstrac return 0; } + @Override public boolean hasEdge(T src, T dst) { return forwardEdges.containsKey(src) && ((Set) forwardEdges.get(src)).contains(dst); } + @Override public void addEdge(T src, T dst) { throw new UnsupportedOperationException(); } + @Override public void removeEdge(T src, T dst) { throw new UnsupportedOperationException(); } + @Override public void removeAllIncidentEdges(T node) { throw new UnsupportedOperationException(); } + @Override public void removeIncomingEdges(T node) { throw new UnsupportedOperationException(); } + @Override public void removeOutgoingEdges(T node) { throw new UnsupportedOperationException(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ArrayClass.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ArrayClass.java index cd8ad5b72..95c977025 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ArrayClass.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ArrayClass.java @@ -65,6 +65,7 @@ public class ArrayClass implements IClass, Constants { /* * @see com.ibm.wala.classLoader.IClass#getClassLoader() */ + @Override public IClassLoader getClassLoader() { return loader; } @@ -72,6 +73,7 @@ public class ArrayClass implements IClass, Constants { /* * @see com.ibm.wala.classLoader.IClass#getName() */ + @Override public TypeName getName() { return getReference().getName(); } @@ -79,6 +81,7 @@ public class ArrayClass implements IClass, Constants { /* * @see com.ibm.wala.classLoader.IClass#isInterface() */ + @Override public boolean isInterface() { return false; } @@ -86,6 +89,7 @@ public class ArrayClass implements IClass, Constants { /* * @see com.ibm.wala.classLoader.IClass#isAbstract() */ + @Override public boolean isAbstract() { return false; } @@ -93,6 +97,7 @@ public class ArrayClass implements IClass, Constants { /* * @see com.ibm.wala.classLoader.IClass#getModifiers() */ + @Override public int getModifiers() { return ACC_PUBLIC | ACC_FINAL; } @@ -104,6 +109,7 @@ public class ArrayClass implements IClass, Constants { /* * @see com.ibm.wala.classLoader.IClass#getSuperclass() */ + @Override public IClass getSuperclass() { IClass elt = getElementClass(); assert getReference().getArrayElementType().isPrimitiveType() || elt != null; @@ -126,14 +132,17 @@ public class ArrayClass implements IClass, Constants { /* * @see com.ibm.wala.classLoader.IClass#getMethod(com.ibm.wala.classLoader.Selector) */ + @Override public IMethod getMethod(Selector sig) { return cha.lookupClass(getClassLoader().getLanguage().getRootType()).getMethod(sig); } + @Override public IField getField(Atom name) { return getSuperclass().getField(name); } + @Override public IField getField(Atom name, TypeName typeName) { return getSuperclass().getField(name, typeName); } @@ -141,6 +150,7 @@ public class ArrayClass implements IClass, Constants { /* * @see com.ibm.wala.classLoader.IClass#getDeclaredMethods() */ + @Override public Collection getDeclaredMethods() { return Collections.emptySet(); } @@ -152,6 +162,7 @@ public class ArrayClass implements IClass, Constants { /* * @see com.ibm.wala.classLoader.IClass#getReference() */ + @Override public TypeReference getReference() { return type; } @@ -159,6 +170,7 @@ public class ArrayClass implements IClass, Constants { /* * @see com.ibm.wala.classLoader.IClass#getSourceFileName() */ + @Override public String getSourceFileName() { return null; } @@ -166,6 +178,7 @@ public class ArrayClass implements IClass, Constants { /* * @see com.ibm.wala.classLoader.IClass#getClassInitializer() */ + @Override public IMethod getClassInitializer() { return null; } @@ -173,6 +186,7 @@ public class ArrayClass implements IClass, Constants { /* * @see com.ibm.wala.classLoader.IClass#isArrayClass() */ + @Override public boolean isArrayClass() { return true; } @@ -201,6 +215,7 @@ public class ArrayClass implements IClass, Constants { /* * @see com.ibm.wala.classLoader.IClass#getDeclaredFields() */ + @Override public Collection getDeclaredInstanceFields() throws UnsupportedOperationException { throw new UnsupportedOperationException(); } @@ -208,6 +223,7 @@ public class ArrayClass implements IClass, Constants { /* * @see com.ibm.wala.classLoader.IClass#getDeclaredStaticFields() */ + @Override public Collection getDeclaredStaticFields() throws UnimplementedError { Assertions.UNREACHABLE(); return null; @@ -216,6 +232,7 @@ public class ArrayClass implements IClass, Constants { /* * @see com.ibm.wala.classLoader.IClass#getAllImplementedInterfaces() */ + @Override public Collection getAllImplementedInterfaces() { HashSet result = HashSetFactory.make(2); for (TypeReference ref : getClassLoader().getLanguage().getArrayInterfaces()) { @@ -238,6 +255,7 @@ public class ArrayClass implements IClass, Constants { /* * @see com.ibm.wala.classLoader.IClass#isReferenceType() */ + @Override public boolean isReferenceType() { return true; } @@ -279,6 +297,7 @@ public class ArrayClass implements IClass, Constants { /* * @see com.ibm.wala.classLoader.IClass#getDirectInterfaces() */ + @Override public Collection getDirectInterfaces() throws UnimplementedError { // TODO Auto-generated method stub Assertions.UNREACHABLE(); @@ -298,6 +317,7 @@ public class ArrayClass implements IClass, Constants { /* * @see com.ibm.wala.classLoader.IClass#getAllInstanceFields() */ + @Override public Collection getAllInstanceFields() { Assertions.UNREACHABLE(); return null; @@ -306,6 +326,7 @@ public class ArrayClass implements IClass, Constants { /* * @see com.ibm.wala.classLoader.IClass#getAllStaticFields() */ + @Override public Collection getAllStaticFields() { Assertions.UNREACHABLE(); return null; @@ -314,6 +335,7 @@ public class ArrayClass implements IClass, Constants { /* * @see com.ibm.wala.classLoader.IClass#getAllMethods() */ + @Override public Collection getAllMethods() { return loader.lookupClass(getClassLoader().getLanguage().getRootType().getName()).getAllMethods(); } @@ -321,27 +343,33 @@ public class ArrayClass implements IClass, Constants { /* * @see com.ibm.wala.classLoader.IClass#getAllFields() */ + @Override public Collection getAllFields() { Assertions.UNREACHABLE(); return null; } + @Override public IClassHierarchy getClassHierarchy() { return cha; } + @Override public boolean isPublic() { return true; } + @Override public boolean isPrivate() { return false; } + @Override public InputStream getSource() { return null; } + @Override public Collection getAnnotations() { return Collections.emptySet(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/BinaryDirectoryTreeModule.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/BinaryDirectoryTreeModule.java index f00d7c270..9dead1d0e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/BinaryDirectoryTreeModule.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/BinaryDirectoryTreeModule.java @@ -33,7 +33,7 @@ public class BinaryDirectoryTreeModule extends DirectoryTreeModule { @Override protected FileModule makeFile(final File file) { try { - return new ClassFileModule(file); + return new ClassFileModule(file, this); } catch (InvalidClassFileException e) { Warnings.add(new Warning(Warning.MODERATE) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/BytecodeClass.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/BytecodeClass.java index 5b3d235cb..8b7ec7bf6 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/BytecodeClass.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/BytecodeClass.java @@ -144,6 +144,8 @@ public abstract class BytecodeClass implements IClass { } } + public abstract Module getContainer(); + public IClassLoader getClassLoader() { return loader; } @@ -570,6 +572,5 @@ public abstract class BytecodeClass implements IClass { } } } - } - + } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ClassLoaderFactoryImpl.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ClassLoaderFactoryImpl.java index 8e01d26a3..23804672c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ClassLoaderFactoryImpl.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ClassLoaderFactoryImpl.java @@ -53,6 +53,7 @@ public class ClassLoaderFactoryImpl implements ClassLoaderFactory { * @param classLoaderReference * identifier for the desired class loader */ + @Override public IClassLoader getLoader(ClassLoaderReference classLoaderReference, IClassHierarchy cha, AnalysisScope scope) throws IOException { if (classLoaderReference == null) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ClassLoaderImpl.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ClassLoaderImpl.java index c0715a634..a26566cd1 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ClassLoaderImpl.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ClassLoaderImpl.java @@ -431,6 +431,7 @@ public class ClassLoaderImpl implements IClassLoader { * * @throws IllegalArgumentException if modules is null */ + @Override public void init(List modules) throws IOException { if (modules == null) { @@ -529,10 +530,12 @@ public class ClassLoaderImpl implements IClassLoader { } } + @Override public ClassLoaderReference getReference() { return loader; } + @Override public Iterator iterateAllClasses() { return getAllClasses().iterator(); } @@ -540,6 +543,7 @@ public class ClassLoaderImpl implements IClassLoader { /* * @see com.ibm.wala.classLoader.IClassLoader#lookupClass(com.ibm.wala.types.TypeName) */ + @Override public IClass lookupClass(TypeName className) { if (className == null) { throw new IllegalArgumentException("className is null"); @@ -569,14 +573,17 @@ public class ClassLoaderImpl implements IClassLoader { /** * Method getParent. */ + @Override public IClassLoader getParent() { return parent; } + @Override public Atom getName() { return loader.getName(); } + @Override public Language getLanguage() { return Language.JAVA; } @@ -589,6 +596,7 @@ public class ClassLoaderImpl implements IClassLoader { /* * @see com.ibm.wala.classLoader.IClassLoader#getNumberOfClasses() */ + @Override public int getNumberOfClasses() { return getAllClasses().size(); } @@ -596,6 +604,7 @@ public class ClassLoaderImpl implements IClassLoader { /* * @see com.ibm.wala.classLoader.IClassLoader#getNumberOfMethods() */ + @Override public int getNumberOfMethods() { int result = 0; for (Iterator it = iterateAllClasses(); it.hasNext();) { @@ -608,6 +617,7 @@ public class ClassLoaderImpl implements IClassLoader { /* * @see com.ibm.wala.classLoader.IClassLoader#getSourceFileName(com.ibm.wala.classLoader.IClass) */ + @Override public String getSourceFileName(IClass klass) { if (klass == null) { throw new IllegalArgumentException("klass is null"); @@ -616,14 +626,17 @@ public class ClassLoaderImpl implements IClassLoader { return e == null ? null : e.getName(); } + @Override public InputStream getSource(IMethod method, int offset) { return getSource(method.getDeclaringClass()); } + @Override public String getSourceFileName(IMethod method, int offset) { return getSourceFileName(method.getDeclaringClass()); } + @Override public InputStream getSource(IClass klass) { if (klass == null) { throw new IllegalArgumentException("klass is null"); @@ -635,6 +648,7 @@ public class ClassLoaderImpl implements IClassLoader { /* * @see com.ibm.wala.classLoader.IClassLoader#removeAll(java.util.Collection) */ + @Override public void removeAll(Collection toRemove) { if (toRemove == null) { throw new IllegalArgumentException("toRemove is null"); @@ -649,6 +663,7 @@ public class ClassLoaderImpl implements IClassLoader { } } + @Override public SSAInstructionFactory getInstructionFactory() { return getLanguage().instructionFactory(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/DirectoryTreeModule.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/DirectoryTreeModule.java index a96e60e7d..e6e25d06e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/DirectoryTreeModule.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/DirectoryTreeModule.java @@ -66,6 +66,7 @@ public abstract class DirectoryTreeModule implements Module { return result; } + @Override public Iterator getEntries() { return getEntriesRecursive(root).iterator(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/FieldImpl.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/FieldImpl.java index 141233efe..7077fde69 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/FieldImpl.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/FieldImpl.java @@ -50,6 +50,7 @@ public final class FieldImpl implements IField { /* * @see com.ibm.wala.classLoader.IMember#getDeclaringClass() */ + @Override public IClass getDeclaringClass() { return declaringClass; } @@ -79,6 +80,7 @@ public final class FieldImpl implements IField { return fr.toString(); } + @Override public FieldReference getReference() { return FieldReference.findOrCreate(getDeclaringClass().getReference(), getName(), getFieldTypeReference()); } @@ -86,6 +88,7 @@ public final class FieldImpl implements IField { /* * @see com.ibm.wala.classLoader.IMember#getName() */ + @Override public Atom getName() { return fieldRef.getName(); } @@ -93,38 +96,47 @@ public final class FieldImpl implements IField { /* * @see com.ibm.wala.classLoader.IField#getFieldTypeReference() */ + @Override public TypeReference getFieldTypeReference() { return fieldRef.getFieldType(); } + @Override public boolean isStatic() { return ((accessFlags & ClassConstants.ACC_STATIC) != 0); } + @Override public boolean isFinal() { return ((accessFlags & ClassConstants.ACC_FINAL) != 0); } + @Override public boolean isPrivate() { return ((accessFlags & ClassConstants.ACC_PRIVATE) != 0); } + @Override public boolean isProtected() { return ((accessFlags & ClassConstants.ACC_PROTECTED) != 0); } + @Override public boolean isPublic() { return ((accessFlags & ClassConstants.ACC_PUBLIC) != 0); } + @Override public boolean isVolatile() { return ((accessFlags & ClassConstants.ACC_VOLATILE) != 0); } + @Override public IClassHierarchy getClassHierarchy() { return declaringClass.getClassHierarchy(); } + @Override public Collection getAnnotations() { return annotations == null ? null : Collections.unmodifiableCollection(annotations); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/IField.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/IField.java index e04c7730c..6b135df89 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/IField.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/IField.java @@ -35,6 +35,7 @@ public interface IField extends IMember { public boolean isPrivate(); public boolean isProtected(); public boolean isPublic(); + @Override public boolean isStatic(); /** diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/JVMClass.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/JVMClass.java index a3ab48f99..899584c89 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/JVMClass.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/JVMClass.java @@ -32,20 +32,24 @@ public abstract class JVMClass extends BytecodeClass */ protected int modifiers; + @Override public int getModifiers() { return modifiers; } + @Override public boolean isPublic() { boolean result = ((modifiers & Constants.ACC_PUBLIC) != 0); return result; } + @Override public boolean isPrivate() { boolean result = ((modifiers & Constants.ACC_PRIVATE) != 0); return result; } + @Override public boolean isInterface() { boolean result = ((modifiers & Constants.ACC_INTERFACE) != 0); return result; @@ -55,6 +59,7 @@ public abstract class JVMClass extends BytecodeClass /* * @see com.ibm.wala.classLoader.IClass#isAbstract() */ + @Override public boolean isAbstract() { boolean result = ((modifiers & Constants.ACC_ABSTRACT) != 0); return result; @@ -63,6 +68,7 @@ public abstract class JVMClass extends BytecodeClass /** * @see com.ibm.wala.classLoader.IClass#getClassInitializer() */ + @Override public IMethod getClassInitializer() { try { computeMethodMapIfNeeded(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/JarFileModule.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/JarFileModule.java index dc7dd536b..509d7ac69 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/JarFileModule.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/JarFileModule.java @@ -60,6 +60,7 @@ public class JarFileModule implements Module { /* * @see com.ibm.wala.classLoader.Module#getEntries() */ + @Override public Iterator getEntries() { HashSet result = HashSetFactory.make(); for (Enumeration e = file.entries(); e.hasMoreElements();) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/JavaLanguage.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/JavaLanguage.java index 699785859..19ae7f94a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/JavaLanguage.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/JavaLanguage.java @@ -74,6 +74,7 @@ import com.ibm.wala.util.warnings.Warnings; public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Constants { public static class JavaInstructionFactory implements SSAInstructionFactory { + @Override public SSAArrayLengthInstruction ArrayLengthInstruction(int result, int arrayref) { return new SSAArrayLengthInstruction(result, arrayref) { @Override @@ -83,6 +84,7 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons }; } + @Override public SSAArrayLoadInstruction ArrayLoadInstruction(int result, int arrayref, int index, TypeReference declaredType) { return new SSAArrayLoadInstruction(result, arrayref, index, declaredType) { @Override @@ -92,6 +94,7 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons }; } + @Override public SSAArrayStoreInstruction ArrayStoreInstruction(int arrayref, int index, int value, TypeReference declaredType) { return new SSAArrayStoreInstruction(arrayref, index, value, declaredType) { @Override @@ -105,6 +108,7 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons }; } + @Override public SSABinaryOpInstruction BinaryOpInstruction(IBinaryOpInstruction.IOperator operator, boolean overflow, boolean unsigned, int result, int val1, int val2, boolean mayBeInteger) { assert !overflow; @@ -128,10 +132,12 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons }; } + @Override public SSACheckCastInstruction CheckCastInstruction(int result, int val, int[] typeValues, boolean isPEI) { throw new UnsupportedOperationException(); } + @Override public SSACheckCastInstruction CheckCastInstruction(int result, int val, TypeReference[] types, boolean isPEI) { assert types.length == 1; assert isPEI; @@ -143,25 +149,30 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons }; } + @Override public SSACheckCastInstruction CheckCastInstruction(int result, int val, int typeValue, boolean isPEI) { assert isPEI; return CheckCastInstruction(result, val, new int[]{ typeValue }, true); } + @Override public SSACheckCastInstruction CheckCastInstruction(int result, int val, TypeReference type, boolean isPEI) { assert isPEI; return CheckCastInstruction(result, val, new TypeReference[]{ type }, true); } + @Override public SSAComparisonInstruction ComparisonInstruction(IComparisonInstruction.Operator operator, int result, int val1, int val2) { return new SSAComparisonInstruction(operator, result, val1, val2); } + @Override public SSAConditionalBranchInstruction ConditionalBranchInstruction(IConditionalBranchInstruction.IOperator operator, TypeReference type, int val1, int val2) { return new SSAConditionalBranchInstruction(operator, type, val1, val2); } + @Override public SSAConversionInstruction ConversionInstruction(int result, int val, TypeReference fromType, TypeReference toType, boolean overflow) { assert !overflow; @@ -177,15 +188,18 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons }; } + @Override public SSAGetCaughtExceptionInstruction GetCaughtExceptionInstruction(int bbNumber, int exceptionValueNumber) { return new SSAGetCaughtExceptionInstruction(bbNumber, exceptionValueNumber); } + @Override public SSAGetInstruction GetInstruction(int result, FieldReference field) { return new SSAGetInstruction(result, field) { }; } + @Override public SSAGetInstruction GetInstruction(int result, int ref, FieldReference field) { return new SSAGetInstruction(result, ref, field) { @Override @@ -195,14 +209,17 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons }; } + @Override public SSAGotoInstruction GotoInstruction() { return new SSAGotoInstruction(); } + @Override public SSAInstanceofInstruction InstanceofInstruction(int result, int ref, TypeReference checkedType) { return new SSAInstanceofInstruction(result, ref, checkedType); } + @Override public SSAInvokeInstruction InvokeInstruction(int result, int[] params, int exception, CallSiteReference site) { return new SSAInvokeInstruction(result, params, exception, site) { @Override @@ -216,6 +233,7 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons }; } + @Override public SSAInvokeInstruction InvokeInstruction(int[] params, int exception, CallSiteReference site) { return new SSAInvokeInstruction(params, exception, site) { @Override @@ -229,6 +247,7 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons }; } + @Override public SSAMonitorInstruction MonitorInstruction(int ref, boolean isEnter) { return new SSAMonitorInstruction(ref, isEnter) { @Override @@ -238,6 +257,7 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons }; } + @Override public SSANewInstruction NewInstruction(int result, NewSiteReference site) { return new SSANewInstruction(result, site) { @Override @@ -251,11 +271,13 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons }; } + @Override public SSAPhiInstruction PhiInstruction(int result, int[] params) throws IllegalArgumentException { return new SSAPhiInstruction(result, params) { }; } + @Override public SSAPutInstruction PutInstruction(int ref, int value, FieldReference field) { return new SSAPutInstruction(ref, value, field) { @Override @@ -265,23 +287,28 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons }; } + @Override public SSAPutInstruction PutInstruction(int value, FieldReference field) { return new SSAPutInstruction(value, field) { }; } + @Override public SSAReturnInstruction ReturnInstruction() { return new SSAReturnInstruction(); } + @Override public SSAReturnInstruction ReturnInstruction(int result, boolean isPrimitive) { return new SSAReturnInstruction(result, isPrimitive); } + @Override public SSASwitchInstruction SwitchInstruction(int val, int defaultLabel, int[] casesAndLabels) { return new SSASwitchInstruction(val, defaultLabel, casesAndLabels); } + @Override public SSAThrowInstruction ThrowInstruction(int exception) { return new SSAThrowInstruction(exception) { @Override @@ -291,10 +318,12 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons }; } + @Override public SSAUnaryOpInstruction UnaryOpInstruction(IUnaryOpInstruction.IOperator operator, int result, int val) { return new SSAUnaryOpInstruction(operator, result, val); } + @Override public SSALoadMetadataInstruction LoadMetadataInstruction(int lval, TypeReference entityType, Object token) { return new SSALoadMetadataInstruction(lval, entityType, token) { @Override @@ -304,6 +333,7 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons }; } + @Override public SSANewInstruction NewInstruction(int result, NewSiteReference site, int[] params) { return new SSANewInstruction(result, site, params) { @Override @@ -313,26 +343,32 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons }; } + @Override public SSAPiInstruction PiInstruction(int result, int val, int piBlock, int successorBlock, SSAInstruction cause) { return new SSAPiInstruction(result, val, piBlock, successorBlock, cause); } + @Override public SSAAddressOfInstruction AddressOfInstruction(int lval, int local, TypeReference pointeeType) { throw new UnsupportedOperationException(); } + @Override public SSAAddressOfInstruction AddressOfInstruction(int lval, int local, int indexVal, TypeReference pointeeType) { throw new UnsupportedOperationException(); } + @Override public SSAAddressOfInstruction AddressOfInstruction(int lval, int local, FieldReference field, TypeReference pointeeType) { throw new UnsupportedOperationException(); } + @Override public SSALoadIndirectInstruction LoadIndirectInstruction(int lval, TypeReference t, int addressVal) { throw new UnsupportedOperationException(); } + @Override public SSAStoreIndirectInstruction StoreIndirectInstruction(int addressVal, int rval, TypeReference pointeeType) { throw new UnsupportedOperationException(); } @@ -406,18 +442,22 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons return exceptionInInitializerError; } + @Override public Atom getName() { return ClassLoaderReference.Java; } + @Override public TypeReference getRootType() { return TypeReference.JavaLangObject; } + @Override public TypeReference getThrowableType() { return TypeReference.JavaLangThrowable; } + @Override public TypeReference getConstantType(Object o) { if (o == null) { // TODO: do we really want null here instead of TypeReference.Null? @@ -446,14 +486,17 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons } } + @Override public boolean isNullType(TypeReference type) { return type == null || type == TypeReference.Null; } + @Override public TypeReference[] getArrayInterfaces() { return new TypeReference[] { TypeReference.JavaIoSerializable, TypeReference.JavaLangCloneable }; } + @Override public TypeName lookupPrimitiveType(String name) { throw new UnsupportedOperationException(); } @@ -464,6 +507,7 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons * @throws IllegalArgumentException if target is null * @throws IllegalArgumentException if cha is null */ + @Override public Collection inferInvokeExceptions(MethodReference target, IClassHierarchy cha) throws InvalidClassFileException { @@ -509,6 +553,7 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons * * @throws IllegalArgumentException if pei is null */ + @Override public Collection getImplicitExceptionTypes(IInstruction pei) { if (pei == null) { throw new IllegalArgumentException("pei is null"); @@ -575,48 +620,59 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons } } + @Override public SSAInstructionFactory instructionFactory() { return javaShrikeFactory; } private final static SSAInstructionFactory javaShrikeFactory = new JavaInstructionFactory(); + @Override public boolean isDoubleType(TypeReference type) { return type == TypeReference.Double; } + @Override public boolean isFloatType(TypeReference type) { return type == TypeReference.Float; } + @Override public boolean isIntType(TypeReference type) { return type == TypeReference.Int; } + @Override public boolean isLongType(TypeReference type) { return type == TypeReference.Long; } + @Override public boolean isVoidType(TypeReference type) { return type == TypeReference.Void; } + @Override public boolean isMetadataType(TypeReference type) { return type == TypeReference.JavaLangClass; } + @Override public boolean isStringType(TypeReference type) { return type == TypeReference.JavaLangString; } + @Override public boolean isBooleanType(TypeReference type) { return type == TypeReference.Boolean; } + @Override public boolean isCharType(TypeReference type) { return type == TypeReference.Char; } + @Override public Object getMetadataToken(Object value) { if (value instanceof ClassToken) { return ShrikeUtil.makeTypeReference(ClassLoaderReference.Primordial, ((ClassToken) value).getTypeName()); @@ -626,14 +682,17 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons } } + @Override public TypeReference getPointerType(TypeReference pointee) throws UnsupportedOperationException { throw new UnsupportedOperationException("Java does not permit explicit pointers"); } + @Override public TypeReference getMetadataType() { return TypeReference.JavaLangClass; } + @Override public TypeReference getStringType() { return TypeReference.JavaLangString; } @@ -642,6 +701,7 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons JavaPrimitiveType.init(); } + @Override @SuppressWarnings("static-access") public PrimitiveType getPrimitive(TypeReference reference) { return JavaPrimitiveType.getPrimitive(reference); diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/LanguageImpl.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/LanguageImpl.java index 267a2c2be..d6d05a31b 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/LanguageImpl.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/LanguageImpl.java @@ -30,14 +30,17 @@ public abstract class LanguageImpl implements Language { base.registerDerivedLanguage(this); } + @Override public Language getBaseLanguage() { return baseLang; } + @Override public Set getDerivedLanguages() { return derivedLangs; } + @Override public void registerDerivedLanguage(Language l) { derivedLangs.add(l); if (baseLang != null) diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ModuleEntry.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ModuleEntry.java index ebcefaf28..3ce32451c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ModuleEntry.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ModuleEntry.java @@ -58,4 +58,9 @@ public interface ModuleEntry { */ String getClassName(); + /** + * the containing module + */ + Module getContainer(); + } diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/NestedJarFileModule.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/NestedJarFileModule.java index 6d595a5b9..a2c97fda1 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/NestedJarFileModule.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/NestedJarFileModule.java @@ -21,6 +21,7 @@ public class NestedJarFileModule extends AbstractNestedJarFileModule { private final ZipEntry entry; public NestedJarFileModule(JarFileModule parent, ZipEntry entry) { + super(parent); this.parent = parent; this.entry = entry; if (parent == null) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ResourceJarFileModule.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ResourceJarFileModule.java index 5e1697d48..431577cf2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ResourceJarFileModule.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ResourceJarFileModule.java @@ -19,6 +19,7 @@ public class ResourceJarFileModule extends AbstractNestedJarFileModule { private final URL resourceURL; public ResourceJarFileModule(URL resourceURL) { + super(new SourceURLModule(resourceURL)); this.resourceURL = resourceURL; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeBTMethod.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeBTMethod.java index bc6947b6c..cd511571e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeBTMethod.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeBTMethod.java @@ -326,6 +326,7 @@ public abstract class ShrikeBTMethod implements IMethod, BytecodeConstants { } } + @Override public MethodReference getReference() { if (methodReference == null) { methodReference = computeMethodReference(); @@ -333,56 +334,69 @@ public abstract class ShrikeBTMethod implements IMethod, BytecodeConstants { return methodReference; } + @Override public boolean isClinit() { return getReference().getSelector().equals(MethodReference.clinitSelector); } + @Override public boolean isInit() { return getReference().getName().equals(MethodReference.initAtom); } protected abstract int getModifiers(); + @Override public boolean isNative() { return ((getModifiers() & Constants.ACC_NATIVE) != 0); } + @Override public boolean isAbstract() { return ((getModifiers() & Constants.ACC_ABSTRACT) != 0); } + @Override public boolean isPrivate() { return ((getModifiers() & Constants.ACC_PRIVATE) != 0); } + @Override public boolean isProtected() { return ((getModifiers() & Constants.ACC_PROTECTED) != 0); } + @Override public boolean isPublic() { return ((getModifiers() & Constants.ACC_PUBLIC) != 0); } + @Override public boolean isFinal() { return ((getModifiers() & Constants.ACC_FINAL) != 0); } + @Override public boolean isBridge() { return ((getModifiers() & Constants.ACC_VOLATILE) != 0); } + @Override public boolean isSynchronized() { return ((getModifiers() & Constants.ACC_SYNCHRONIZED) != 0); } + @Override public boolean isStatic() { return ((getModifiers() & Constants.ACC_STATIC) != 0); } + @Override public boolean isSynthetic() { return false; } + @Override public IClass getDeclaringClass() { return declaringClass; } @@ -530,10 +544,12 @@ public abstract class ShrikeBTMethod implements IMethod, BytecodeConstants { // TODO: ShrikeBT should have a getMaxStack method on Decoder, I think. public abstract int getMaxStackHeight(); + @Override public Atom getName() { return getReference().getName(); } + @Override public Descriptor getDescriptor() { return getReference().getDescriptor(); } @@ -675,6 +691,7 @@ public abstract class ShrikeBTMethod implements IMethod, BytecodeConstants { /** * By convention, for a non-static method, getParameterType(0) is the this pointer */ + @Override public TypeReference getParameterType(int i) { if (!isStatic()) { if (i == 0) { @@ -692,6 +709,7 @@ public abstract class ShrikeBTMethod implements IMethod, BytecodeConstants { * * @return int */ + @Override public int getNumberOfParameters() { if (isStatic() || isClinit()) { return getReference().getNumberOfParameters(); @@ -703,6 +721,7 @@ public abstract class ShrikeBTMethod implements IMethod, BytecodeConstants { /* * @see com.ibm.wala.classLoader.IMethod#hasExceptionHandler() */ + @Override public abstract boolean hasExceptionHandler(); /** @@ -712,6 +731,7 @@ public abstract class ShrikeBTMethod implements IMethod, BytecodeConstants { * * @see com.ibm.wala.classLoader.IMethod#getDeclaredExceptions() */ + @Override public TypeReference[] getDeclaredExceptions() throws InvalidClassFileException { return (getBCInfo().exceptionTypes == null) ? new TypeReference[0] : getBCInfo().exceptionTypes; } @@ -744,6 +764,7 @@ public abstract class ShrikeBTMethod implements IMethod, BytecodeConstants { /* * @see com.ibm.wala.classLoader.IMethod#getLineNumber(int) */ + @Override public int getLineNumber(int bcIndex) { try { return (getBCInfo().lineNumberMap == null) ? -1 : getBCInfo().lineNumberMap[bcIndex]; @@ -779,6 +800,7 @@ public abstract class ShrikeBTMethod implements IMethod, BytecodeConstants { /* * @see com.ibm.wala.classLoader.IMethod#getSignature() */ + @Override public String getSignature() { return getReference().getSignature(); } @@ -786,6 +808,7 @@ public abstract class ShrikeBTMethod implements IMethod, BytecodeConstants { /* * @see com.ibm.wala.classLoader.IMethod#getSelector() */ + @Override public Selector getSelector() { return getReference().getSelector(); } @@ -793,6 +816,7 @@ public abstract class ShrikeBTMethod implements IMethod, BytecodeConstants { /* * @see com.ibm.wala.classLoader.IMethod#getLocalVariableName(int, int) */ + @Override public abstract String getLocalVariableName(int bcIndex, int localNumber); /* @@ -800,6 +824,7 @@ public abstract class ShrikeBTMethod implements IMethod, BytecodeConstants { * * @see com.ibm.wala.classLoader.IMethod#hasLocalVariableTable() */ + @Override public abstract boolean hasLocalVariableTable(); /** diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeCTMethod.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeCTMethod.java index 18fc1b5cd..67d166db7 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeCTMethod.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeCTMethod.java @@ -308,10 +308,12 @@ public final class ShrikeCTMethod extends ShrikeBTMethod implements IBytecodeMet } } + @Override public TypeReference getReturnType() { return getReference().getReturnType(); } + @Override public IClassHierarchy getClassHierarchy() { return cha; } @@ -355,6 +357,7 @@ public final class ShrikeCTMethod extends ShrikeBTMethod implements IBytecodeMet return Annotation.getAnnotationsFromReader(r, getDeclaringClass().getClassLoader().getReference()); } + @Override public Collection getAnnotations() { Collection result = HashSetFactory.make(); try { @@ -370,16 +373,19 @@ public final class ShrikeCTMethod extends ShrikeBTMethod implements IBytecodeMet private final int[] NOTHING = new int[0]; + @Override public int[] indirectlyReadLocals(int instructionIndex) { return NOTHING; } + @Override public int[] indirectlyWrittenLocals(int instructionIndex) { return NOTHING; } }; + @Override public IndirectionData getIndirectionData() { return NO_INDIRECTIONS; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeIRFactory.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeIRFactory.java index 2fb4a807a..37764809e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeIRFactory.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeIRFactory.java @@ -36,6 +36,7 @@ public class ShrikeIRFactory implements IRFactory { return ShrikeCFG.make(method); } + @Override public IR makeIR(final IBytecodeMethod method, Context C, final SSAOptions options) throws IllegalArgumentException { if (method == null) { @@ -113,6 +114,7 @@ public class ShrikeIRFactory implements IRFactory { }; } + @Override public boolean contextIsIrrelevant(IBytecodeMethod method) { // this factory always returns the same IR for a method return true; diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/SourceDirectoryTreeModule.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/SourceDirectoryTreeModule.java index a0ceb9596..327404073 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/SourceDirectoryTreeModule.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/SourceDirectoryTreeModule.java @@ -48,7 +48,7 @@ public class SourceDirectoryTreeModule extends DirectoryTreeModule { assert filePath.startsWith(rootPath); - return new SourceFileModule(file, filePath.substring(rootPath.length())); + return new SourceFileModule(file, filePath.substring(rootPath.length()), this); } @Override diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/SourceURLModule.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/SourceURLModule.java index e30faea0c..2a8b2004d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/SourceURLModule.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/SourceURLModule.java @@ -20,14 +20,17 @@ public class SourceURLModule extends AbstractURLModule implements SourceModule { super(url); } + @Override public boolean isClassFile() { return false; } + @Override public boolean isSourceFile() { return true; } + @Override public Reader getInputReader() { return new InputStreamReader(getInputStream()); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/SyntheticClass.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/SyntheticClass.java index d38d18ed4..155cb3914 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/SyntheticClass.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/SyntheticClass.java @@ -75,6 +75,7 @@ public abstract class SyntheticClass implements IClass { * Subclasses may override as necessary. * @see com.ibm.wala.classLoader.IClass#getClassLoader() */ + @Override public IClassLoader getClassLoader() { return cha.getLoader(ClassLoaderReference.Primordial); } @@ -82,6 +83,7 @@ public abstract class SyntheticClass implements IClass { /* * @see com.ibm.wala.classLoader.IClass#isInterface() */ + @Override public boolean isInterface() { return false; } @@ -89,6 +91,7 @@ public abstract class SyntheticClass implements IClass { /* * @see com.ibm.wala.classLoader.IClass#isAbstract() */ + @Override public boolean isAbstract() { return false; } @@ -96,6 +99,7 @@ public abstract class SyntheticClass implements IClass { /* * @see com.ibm.wala.classLoader.IClass#getReference() */ + @Override public TypeReference getReference() { return T; } @@ -103,10 +107,12 @@ public abstract class SyntheticClass implements IClass { /* * @see com.ibm.wala.classLoader.IClass#getSourceFileName() */ + @Override public String getSourceFileName() { return null; } + @Override public InputStream getSource() { return null; } @@ -114,14 +120,17 @@ public abstract class SyntheticClass implements IClass { /* * @see com.ibm.wala.classLoader.IClass#isArrayClass() */ + @Override public boolean isArrayClass() { return false; } + @Override public IClassHierarchy getClassHierarchy() { return cha; } + @Override public TypeName getName() { return getReference().getName(); } @@ -129,10 +138,12 @@ public abstract class SyntheticClass implements IClass { /** * we assume synthetic classes do not need to have multiple fields with the same name. */ + @Override public IField getField(Atom name, TypeName typeName) { return getField(name); } + @Override public Collection getAnnotations() { return Collections.emptySet(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/SyntheticMethod.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/SyntheticMethod.java index d3a3d25e4..23eba9bcb 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/SyntheticMethod.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/SyntheticMethod.java @@ -74,6 +74,7 @@ public class SyntheticMethod implements IMethod { /** * @see com.ibm.wala.classLoader.IMethod#isClinit() */ + @Override public boolean isClinit() { return method.getSelector().equals(MethodReference.clinitSelector); } @@ -81,6 +82,7 @@ public class SyntheticMethod implements IMethod { /** * @see com.ibm.wala.classLoader.IMethod#isInit() */ + @Override public boolean isInit() { return method.getSelector().equals(MethodReference.initSelector); } @@ -88,6 +90,7 @@ public class SyntheticMethod implements IMethod { /** * @see com.ibm.wala.classLoader.IMethod#isStatic() */ + @Override public boolean isStatic() { return isStatic; } @@ -95,6 +98,7 @@ public class SyntheticMethod implements IMethod { /** * @see com.ibm.wala.classLoader.IMethod#isNative() */ + @Override public boolean isNative() { return false; } @@ -102,6 +106,7 @@ public class SyntheticMethod implements IMethod { /** * @see com.ibm.wala.classLoader.IMethod#isAbstract() */ + @Override public boolean isAbstract() { return false; } @@ -109,14 +114,17 @@ public class SyntheticMethod implements IMethod { /** * @see com.ibm.wala.classLoader.IMethod#isPrivate() */ + @Override public boolean isPrivate() { return false; } + @Override public boolean isProtected() { return false; } + @Override public boolean isPublic() { return false; } @@ -124,6 +132,7 @@ public class SyntheticMethod implements IMethod { /** * @see com.ibm.wala.classLoader.IMethod#isFinal() */ + @Override public boolean isFinal() { return false; } @@ -131,6 +140,7 @@ public class SyntheticMethod implements IMethod { /** * @see com.ibm.wala.classLoader.IMethod#isBridge() */ + @Override public boolean isBridge() { return false; } @@ -138,6 +148,7 @@ public class SyntheticMethod implements IMethod { /** * @see com.ibm.wala.classLoader.IMethod#isAbstract() */ + @Override public boolean isSynchronized() { return false; } @@ -145,6 +156,7 @@ public class SyntheticMethod implements IMethod { /** * @see com.ibm.wala.classLoader.IMethod#isSynthetic() */ + @Override public boolean isSynthetic() { return true; } @@ -152,6 +164,7 @@ public class SyntheticMethod implements IMethod { /** * @see com.ibm.wala.classLoader.IMethod#getReference() */ + @Override public MethodReference getReference() { return method; } @@ -189,6 +202,7 @@ public class SyntheticMethod implements IMethod { throw new UnsupportedOperationException(); } + @Override public IClass getDeclaringClass() { return declaringClass; } @@ -234,6 +248,7 @@ public class SyntheticMethod implements IMethod { return true; } + @Override public boolean hasExceptionHandler() { return false; } @@ -273,6 +288,7 @@ public class SyntheticMethod implements IMethod { /* * @see com.ibm.wala.classLoader.IMethod#getParameterType(int) */ + @Override public TypeReference getParameterType(int i) { if (isStatic()) { return method.getParameterType(i); @@ -289,6 +305,7 @@ public class SyntheticMethod implements IMethod { * * @see com.ibm.wala.classLoader.IMethod#getNumberOfParameters() */ + @Override public int getNumberOfParameters() { int n = method.getNumberOfParameters(); return isStatic() ? n : n + 1; @@ -297,6 +314,7 @@ public class SyntheticMethod implements IMethod { /* * @see com.ibm.wala.classLoader.IMethod#getDeclaredExceptions() */ + @Override public TypeReference[] getDeclaredExceptions() throws InvalidClassFileException { if (resolvedMethod == null) { return null; @@ -305,10 +323,12 @@ public class SyntheticMethod implements IMethod { } } + @Override public Atom getName() { return method.getSelector().getName(); } + @Override public Descriptor getDescriptor() { return method.getSelector().getDescriptor(); } @@ -316,6 +336,7 @@ public class SyntheticMethod implements IMethod { /* * @see com.ibm.wala.classLoader.IMethod#getLineNumber(int) */ + @Override public int getLineNumber(int bcIndex) { return -1; } @@ -327,6 +348,7 @@ public class SyntheticMethod implements IMethod { /* * @see com.ibm.wala.classLoader.IMethod#getSignature() */ + @Override public String getSignature() { return getReference().getSignature(); } @@ -334,6 +356,7 @@ public class SyntheticMethod implements IMethod { /* * @see com.ibm.wala.classLoader.IMethod#getSelector() */ + @Override public Selector getSelector() { return getReference().getSelector(); } @@ -341,6 +364,7 @@ public class SyntheticMethod implements IMethod { /* * @see com.ibm.wala.classLoader.IMethod#getLocalVariableName(int, int) */ + @Override public String getLocalVariableName(int bcIndex, int localNumber) { // no information is available return null; @@ -349,6 +373,7 @@ public class SyntheticMethod implements IMethod { /* * @see com.ibm.wala.classLoader.IMethod#hasLocalVariableTable() */ + @Override public boolean hasLocalVariableTable() { return false; } @@ -360,14 +385,17 @@ public class SyntheticMethod implements IMethod { /* * @see com.ibm.wala.classLoader.IMethod#getReturnType() */ + @Override public TypeReference getReturnType() { return getReference().getReturnType(); } + @Override public IClassHierarchy getClassHierarchy() { return getDeclaringClass().getClassHierarchy(); } + @Override public Collection getAnnotations() { return Collections.emptySet(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/client/AbstractAnalysisEngine.java b/com.ibm.wala.core/src/com/ibm/wala/client/AbstractAnalysisEngine.java index d4d848d8d..6005d94ee 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/client/AbstractAnalysisEngine.java +++ b/com.ibm.wala.core/src/com/ibm/wala/client/AbstractAnalysisEngine.java @@ -121,6 +121,7 @@ public abstract class AbstractAnalysisEngine implements AnalysisEngine { private HeapGraph heapGraph; private EntrypointBuilder entrypointBuilder = new EntrypointBuilder() { + @Override public Iterable createEntrypoints(AnalysisScope scope, IClassHierarchy cha) { return makeDefaultEntrypoints(scope, cha); } @@ -141,6 +142,7 @@ public abstract class AbstractAnalysisEngine implements AnalysisEngine { return builder; } + @Override public void setModuleFiles(Collection moduleFiles) { this.moduleFiles = moduleFiles; } @@ -218,6 +220,7 @@ public abstract class AbstractAnalysisEngine implements AnalysisEngine { } } + @Override public void setJ2SELibraries(JarFile[] libs) { if (libs == null) { throw new IllegalArgumentException("libs is null"); @@ -228,6 +231,7 @@ public abstract class AbstractAnalysisEngine implements AnalysisEngine { } } + @Override public void setJ2SELibraries(Module[] libs) { if (libs == null) { throw new IllegalArgumentException("libs is null"); @@ -238,6 +242,7 @@ public abstract class AbstractAnalysisEngine implements AnalysisEngine { } } + @Override public void setClosedWorld(boolean b) { this.closedWorld = b; } @@ -269,6 +274,7 @@ public abstract class AbstractAnalysisEngine implements AnalysisEngine { this.exclusionsFile = exclusionsFile; } + @Override public AnalysisOptions getDefaultOptions(Iterable entrypoints) { return new AnalysisOptions(getScope(), entrypoints); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/client/AbstractEngineStopwatch.java b/com.ibm.wala.core/src/com/ibm/wala/client/AbstractEngineStopwatch.java index b245ed7e7..133bb5a7c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/client/AbstractEngineStopwatch.java +++ b/com.ibm.wala.core/src/com/ibm/wala/client/AbstractEngineStopwatch.java @@ -36,6 +36,7 @@ public abstract class AbstractEngineStopwatch implements EngineStopwatch { } } + @Override public final String report() { StringBuffer result = new StringBuffer(); long total = 0; @@ -50,6 +51,7 @@ public abstract class AbstractEngineStopwatch implements EngineStopwatch { /** * */ + @Override public void start(byte category) { stopwatch[category].start(); } @@ -57,10 +59,12 @@ public abstract class AbstractEngineStopwatch implements EngineStopwatch { /** * */ + @Override public void stop(byte category) { stopwatch[category].stop(); } + @Override public StopwatchGC getTimer(byte category) { return stopwatch[category]; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BackwardsSupergraph.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BackwardsSupergraph.java index 010774a66..231e06271 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BackwardsSupergraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BackwardsSupergraph.java @@ -60,6 +60,7 @@ public class BackwardsSupergraph implements ISupergraph { * * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getProcedureGraph() */ + @Override public Graph getProcedureGraph() { return delegate.getProcedureGraph(); } @@ -67,6 +68,7 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#isCall(java.lang.Object) */ + @Override public boolean isCall(T n) { return delegate.isReturn(n); } @@ -78,6 +80,7 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.util.Filter#accepts(java.lang.Object) */ + @Override @SuppressWarnings("unchecked") public boolean accepts(Object o) { return delegate.isExit((T) o); @@ -89,6 +92,7 @@ public class BackwardsSupergraph implements ISupergraph { * * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getCalledNodes(java.lang.Object) */ + @Override public Iterator getCalledNodes(T ret) { if (DEBUG_LEVEL > 1) { System.err.println(getClass() + " getCalledNodes " + ret); @@ -103,9 +107,11 @@ public class BackwardsSupergraph implements ISupergraph { * * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getCalledNodes(java.lang.Object) */ + @Override public Iterator getNormalSuccessors(final T ret) { Iterator allPreds = delegate.getPredNodes(ret); Filter sameProc = new Filter() { + @Override public boolean accepts(T o) { // throw out the exit node, which can be a predecessor due to tail recursion. return getProcOf(ret).equals(getProcOf(o)) && !delegate.isExit(o); @@ -113,6 +119,7 @@ public class BackwardsSupergraph implements ISupergraph { }; Iterator sameProcPreds = new FilterIterator(allPreds, sameProc); Filter notCall = new Filter() { + @Override public boolean accepts(T o) { return !delegate.isCall(o); } @@ -123,6 +130,7 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getReturnSites(java.lang.Object) */ + @Override public Iterator getReturnSites(T c, P callee) { return delegate.getCallSites(c, callee); } @@ -130,6 +138,7 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#isExit(java.lang.Object) */ + @Override public boolean isExit(T n) { return delegate.isEntry(n); } @@ -137,6 +146,7 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getProcOf(java.lang.Object) */ + @Override public P getProcOf(T n) { return delegate.getProcOf(n); } @@ -144,11 +154,13 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.util.graph.Graph#removeNodeAndEdges(java.lang.Object) */ + @Override public void removeNodeAndEdges(Object N) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } + @Override public Iterator iterator() { return delegate.iterator(); } @@ -156,6 +168,7 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.util.graph.NodeManager#getNumberOfNodes() */ + @Override public int getNumberOfNodes() { return delegate.getNumberOfNodes(); } @@ -163,6 +176,7 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.util.graph.NodeManager#addNode(java.lang.Object) */ + @Override public void addNode(Object n) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } @@ -170,6 +184,7 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.util.graph.NodeManager#removeNode(java.lang.Object) */ + @Override public void removeNode(Object n) throws UnsupportedOperationException { throw new UnsupportedOperationException(); @@ -178,6 +193,7 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.util.graph.NodeManager#containsNode(java.lang.Object) */ + @Override public boolean containsNode(T N) { return delegate.containsNode(N); } @@ -185,6 +201,7 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.util.graph.EdgeManager#getPredNodes(java.lang.Object) */ + @Override public Iterator getPredNodes(T N) { return delegate.getSuccNodes(N); } @@ -192,6 +209,7 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.util.graph.EdgeManager#getPredNodeCount(java.lang.Object) */ + @Override public int getPredNodeCount(T N) { return delegate.getSuccNodeCount(N); } @@ -199,10 +217,12 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.util.graph.EdgeManager#getSuccNodes(java.lang.Object) */ + @Override public Iterator getSuccNodes(T N) { return delegate.getPredNodes(N); } + @Override public boolean hasEdge(T src, T dst) { return delegate.hasEdge(dst, src); } @@ -210,6 +230,7 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.util.graph.EdgeManager#getSuccNodeCount(java.lang.Object) */ + @Override public int getSuccNodeCount(T N) { return delegate.getPredNodeCount(N); } @@ -217,10 +238,12 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.util.graph.EdgeManager#addEdge(java.lang.Object, java.lang.Object) */ + @Override public void addEdge(Object src, Object dst) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } + @Override public void removeEdge(Object src, Object dst) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } @@ -228,6 +251,7 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.util.graph.EdgeManager#removeEdges(java.lang.Object) */ + @Override public void removeAllIncidentEdges(Object node) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } @@ -235,6 +259,7 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getEntriesForProcedure(java.lang.Object) */ + @Override public T[] getEntriesForProcedure(P object) { return delegate.getExitsForProcedure(object); } @@ -242,6 +267,7 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getEntriesForProcedure(java.lang.Object) */ + @Override public T[] getExitsForProcedure(P object) { return delegate.getEntriesForProcedure(object); } @@ -249,6 +275,7 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#isReturn(java.lang.Object) */ + @Override public boolean isReturn(T n) throws UnimplementedError { return delegate.isCall(n); } @@ -256,6 +283,7 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getCallSites(java.lang.Object) */ + @Override public Iterator getCallSites(T r, P callee) { return delegate.getReturnSites(r, callee); } @@ -263,6 +291,7 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#isEntry(java.lang.Object) */ + @Override public boolean isEntry(T n) { return delegate.isExit(n); } @@ -270,6 +299,7 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#classifyEdge(java.lang.Object, java.lang.Object) */ + @Override public byte classifyEdge(T src, T dest) { byte d = delegate.classifyEdge(dest, src); switch (d) { @@ -292,11 +322,13 @@ public class BackwardsSupergraph implements ISupergraph { return "Backwards of delegate\n" + delegate; } + @Override public void removeIncomingEdges(Object node) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } + @Override public void removeOutgoingEdges(T node) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } @@ -304,6 +336,7 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getNumberOfBlocks(java.lang.Object) */ + @Override public int getNumberOfBlocks(P procedure) { return delegate.getNumberOfBlocks(procedure); } @@ -311,6 +344,7 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getLocalBlockNumber(java.lang.Object) */ + @Override public int getLocalBlockNumber(T n) { return delegate.getLocalBlockNumber(n); } @@ -318,31 +352,38 @@ public class BackwardsSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getLocalBlock(java.lang.Object, int) */ + @Override public T getLocalBlock(P procedure, int i) { return delegate.getLocalBlock(procedure, i); } + @Override public int getNumber(T N) { return delegate.getNumber(N); } + @Override public T getNode(int number) { return delegate.getNode(number); } + @Override public int getMaxNumber() { return delegate.getMaxNumber(); } + @Override public Iterator iterateNodes(IntSet s) throws UnimplementedError { Assertions.UNREACHABLE(); return null; } + @Override public IntSet getSuccNodeNumbers(T node) { return delegate.getPredNodeNumbers(node); } + @Override public IntSet getPredNodeNumbers(Object node) throws UnimplementedError { Assertions.UNREACHABLE(); return null; diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/ICFGSupergraph.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/ICFGSupergraph.java index 83806fe66..72e24408f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/ICFGSupergraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/ICFGSupergraph.java @@ -59,6 +59,7 @@ public class ICFGSupergraph implements ISupergraph getProcedureGraph() { return icfg.getCallGraph(); } @@ -79,6 +80,7 @@ public class ICFGSupergraph implements ISupergraph src, BasicBlockInContext dest) { if (isCall(src)) { if (isEntry(dest)) { @@ -97,12 +99,15 @@ public class ICFGSupergraph implements ISupergraph> getCallSites(BasicBlockInContext r, CGNode callee) { return icfg.getCallSites(r, callee); } + @Override public Iterator> getCalledNodes(BasicBlockInContext call) { final Filter> isEntryFilter = new Filter>() { + @Override public boolean accepts(BasicBlockInContext o) { return o.isEntryBlock(); } @@ -110,21 +115,25 @@ public class ICFGSupergraph implements ISupergraph>(getSuccNodes(call), isEntryFilter); } + @Override @SuppressWarnings("unchecked") public BasicBlockInContext[] getEntriesForProcedure(CGNode procedure) { return new BasicBlockInContext[] { icfg.getEntry(procedure) }; } + @Override @SuppressWarnings("unchecked") public BasicBlockInContext[] getExitsForProcedure(CGNode procedure) { return new BasicBlockInContext[] { icfg.getExit(procedure) }; } + @Override public BasicBlockInContext getLocalBlock(CGNode procedure, int i) { IExplodedBasicBlock b = icfg.getCFG(procedure).getNode(i); return new BasicBlockInContext(procedure, b); } + @Override public int getLocalBlockNumber(BasicBlockInContext n) { return n.getDelegate().getNumber(); } @@ -135,135 +144,165 @@ public class ICFGSupergraph implements ISupergraph> getNormalSuccessors(BasicBlockInContext call) { return EmptyIterator.instance(); } + @Override public int getNumberOfBlocks(CGNode procedure) { Assertions.UNREACHABLE(); return 0; } + @Override public CGNode getProcOf(BasicBlockInContext n) { return icfg.getCGNode(n); } + @Override public Iterator> getReturnSites(BasicBlockInContext call, CGNode callee) { return icfg.getReturnSites(call); } + @Override public boolean isCall(BasicBlockInContext n) { return n.getDelegate().getInstruction() instanceof SSAAbstractInvokeInstruction; } + @Override public boolean isEntry(BasicBlockInContext n) { return n.getDelegate().isEntryBlock(); } + @Override public boolean isExit(BasicBlockInContext n) { return n.getDelegate().isExitBlock(); } + @Override public boolean isReturn(BasicBlockInContext n) { return icfg.isReturn(n); } + @Override public void removeNodeAndEdges(BasicBlockInContext N) throws UnsupportedOperationException { Assertions.UNREACHABLE(); } + @Override public void addNode(BasicBlockInContext n) { Assertions.UNREACHABLE(); } + @Override public boolean containsNode(BasicBlockInContext N) { return icfg.containsNode(N); } + @Override public int getNumberOfNodes() { return icfg.getNumberOfNodes(); } + @Override public Iterator> iterator() { return icfg.iterator(); } + @Override public void removeNode(BasicBlockInContext n) { Assertions.UNREACHABLE(); } + @Override public void addEdge(BasicBlockInContext src, BasicBlockInContext dst) { Assertions.UNREACHABLE(); } + @Override public int getPredNodeCount(BasicBlockInContext N) { return icfg.getPredNodeCount(N); } + @Override public Iterator> getPredNodes(BasicBlockInContext N) { return icfg.getPredNodes(N); } + @Override public int getSuccNodeCount(BasicBlockInContext N) { return icfg.getSuccNodeCount(N); } + @Override public Iterator> getSuccNodes(BasicBlockInContext N) { return icfg.getSuccNodes(N); } + @Override public boolean hasEdge(BasicBlockInContext src, BasicBlockInContext dst) { return icfg.hasEdge(src, dst); } + @Override public void removeAllIncidentEdges(BasicBlockInContext node) throws UnsupportedOperationException { Assertions.UNREACHABLE(); } + @Override public void removeEdge(BasicBlockInContext src, BasicBlockInContext dst) throws UnsupportedOperationException { Assertions.UNREACHABLE(); } + @Override public void removeIncomingEdges(BasicBlockInContext node) throws UnsupportedOperationException { Assertions.UNREACHABLE(); } + @Override public void removeOutgoingEdges(BasicBlockInContext node) throws UnsupportedOperationException { Assertions.UNREACHABLE(); } + @Override public int getMaxNumber() { return icfg.getMaxNumber(); } + @Override public BasicBlockInContext getNode(int number) { return icfg.getNode(number); } + @Override public int getNumber(BasicBlockInContext N) { return icfg.getNumber(N); } + @Override public Iterator> iterateNodes(IntSet s) { Assertions.UNREACHABLE(); return null; } + @Override public IntSet getPredNodeNumbers(BasicBlockInContext node) { return icfg.getPredNodeNumbers(node); } + @Override public IntSet getSuccNodeNumbers(BasicBlockInContext node) { return icfg.getSuccNodeNumbers(node); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/IdentityFlowFunction.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/IdentityFlowFunction.java index 24639e6eb..5d8bb6cfd 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/IdentityFlowFunction.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/IdentityFlowFunction.java @@ -19,10 +19,12 @@ public class IdentityFlowFunction implements IReversibleFlowFunction { private final static IdentityFlowFunction singleton = new IdentityFlowFunction(); + @Override public SparseIntSet getTargets(int i) { return SparseIntSet.singleton(i); } + @Override public SparseIntSet getSources(int i) { return SparseIntSet.singleton(i); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/IdentityFlowFunctions.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/IdentityFlowFunctions.java index 902ead9d4..df6856827 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/IdentityFlowFunctions.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/IdentityFlowFunctions.java @@ -28,6 +28,7 @@ public class IdentityFlowFunctions implements IFlowFunctionMap { /* * @see com.ibm.wala.dataflow.IFDS.IFlowFunctionMap#getNormalFlowFunction(java.lang.Object, java.lang.Object) */ + @Override public IUnaryFlowFunction getNormalFlowFunction(T src, T dest) { return IdentityFlowFunction.identity(); } @@ -35,6 +36,7 @@ public class IdentityFlowFunctions implements IFlowFunctionMap { /* * @see com.ibm.wala.dataflow.IFDS.IFlowFunctionMap#getReturnFlowFunction(java.lang.Object, java.lang.Object, java.lang.Object) */ + @Override public IFlowFunction getReturnFlowFunction(T call, T src, T dest) { return IdentityFlowFunction.identity(); } @@ -49,6 +51,7 @@ public class IdentityFlowFunctions implements IFlowFunctionMap { /* * @see com.ibm.wala.dataflow.IFDS.IFlowFunctionMap#getCallToReturnFlowFunction(java.lang.Object, java.lang.Object) */ + @Override public IUnaryFlowFunction getCallToReturnFlowFunction(T src, T dest) { return IdentityFlowFunction.identity(); } @@ -56,10 +59,12 @@ public class IdentityFlowFunctions implements IFlowFunctionMap { /* * @see com.ibm.wala.dataflow.IFDS.IFlowFunctionMap#getCallNoneToReturnFlowFunction(java.lang.Object, java.lang.Object) */ + @Override public IUnaryFlowFunction getCallNoneToReturnFlowFunction(T src, T dest) { return IdentityFlowFunction.identity(); } + @Override public IUnaryFlowFunction getCallFlowFunction(T src, T dest, T ret) { return IdentityFlowFunction.identity(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/KillEverything.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/KillEverything.java index 766f89a88..d4087f109 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/KillEverything.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/KillEverything.java @@ -29,6 +29,7 @@ public class KillEverything implements IUnaryFlowFunction { private KillEverything() { } + @Override public SparseIntSet getTargets(int d1) { return null; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PartiallyBalancedTabulationProblem.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PartiallyBalancedTabulationProblem.java index 339c56092..0a0ddcc43 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PartiallyBalancedTabulationProblem.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PartiallyBalancedTabulationProblem.java @@ -20,6 +20,7 @@ package com.ibm.wala.dataflow.IFDS; */ public interface PartiallyBalancedTabulationProblem extends TabulationProblem { + @Override public IPartiallyBalancedFlowFunctions getFunctionMap(); /** diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/SingletonFlowFunction.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/SingletonFlowFunction.java index 836d61637..0a602b2bf 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/SingletonFlowFunction.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/SingletonFlowFunction.java @@ -25,6 +25,7 @@ public class SingletonFlowFunction implements IReversibleFlowFunction { this.dest = dest; } + @Override public SparseIntSet getTargets(int i) { if (i == 0) { return SparseIntSet.add(zeroSet,dest); @@ -33,6 +34,7 @@ public class SingletonFlowFunction implements IReversibleFlowFunction { } } + @Override public SparseIntSet getSources(int i) { if (i == dest || i == 0) { return zeroSet; diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java index 6c600b6a5..2128af135 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java @@ -342,6 +342,7 @@ public class TabulationSolver { } if (D3 != null) { D3.foreach(new IntSetAction() { + @Override public void act(int d3) { propagate(edge.entry, edge.d1, m, d3); } @@ -432,6 +433,7 @@ public class TabulationSolver { System.err.println("D5 " + D5); } IntSetAction action = new IntSetAction() { + @Override public void act(final int d4) { propToReturnSite(c, entries, retSite, d4, D5); } @@ -456,6 +458,7 @@ public class TabulationSolver { private void propagateToReturnSiteWithBinaryFlowFunction(final PathEdge edge, final T c, final IntSet D4, final T[] entries, final T retSite, final IFlowFunction retf) { D4.foreach(new IntSetAction() { + @Override public void act(final int d4) { final IntSet D5 = computeBinaryFlow(d4, edge.d2, (IBinaryReturnFlowFunction) retf); propToReturnSite(c, entries, retSite, d4, D5); @@ -477,6 +480,7 @@ public class TabulationSolver { private void propToReturnSite(final T c, final T[] entries, final T retSite, final int d4, final IntSet D5) { if (D5 != null) { D5.foreach(new IntSetAction() { + @Override public void act(final int d5) { // [26 - 28] // note that we've modified the algorithm here to account @@ -497,6 +501,7 @@ public class TabulationSolver { } if (D3 != null) { D3.foreach(new IntSetAction() { + @Override public void act(int d3) { // set curPathEdge to be consistent with its setting in processCall() when applying a summary edge curPathEdge = PathEdge.createPathEdge(s_p, d3, c, d4); @@ -562,6 +567,7 @@ public class TabulationSolver { } if (D3 != null) { D3.foreach(new IntSetAction() { + @Override public void act(int d3) { propagate(edge.entry, edge.d1, m, d3); } @@ -587,6 +593,7 @@ public class TabulationSolver { } if (reached != null) { reached.foreach(new IntSetAction() { + @Override public void act(int x) { assert x >= 0; assert edge.d1 >= 0; @@ -639,6 +646,7 @@ public class TabulationSolver { final int s_p_num = supergraph.getLocalBlockNumber(calleeEntry); reached.foreach(new IntSetAction() { + @Override public void act(final int d1) { // we get reuse if we _don't_ propagate a new fact to the callee entry final boolean gotReuse = !propagate(calleeEntry, d1, calleeEntry, d1); @@ -668,6 +676,7 @@ public class TabulationSolver { if (supergraph.hasEdge(exit, returnSite)) { final IFlowFunction retf = flowFunctionMap.getReturnFlowFunction(edge.target, exit, returnSite); reachedBySummary.foreach(new IntSetAction() { + @Override public void act(int d2) { assert curSummaryEdge == null : "curSummaryEdge should be null here"; curSummaryEdge = PathEdge.createPathEdge(calleeEntry, d1, exit, d2); @@ -675,6 +684,7 @@ public class TabulationSolver { final IntSet D5 = computeBinaryFlow(edge.d2, d2, (IBinaryReturnFlowFunction) retf); if (D5 != null) { D5.foreach(new IntSetAction() { + @Override public void act(int d5) { propagate(edge.entry, edge.d1, returnSite, d5); } @@ -684,6 +694,7 @@ public class TabulationSolver { final IntSet D5 = computeFlow(d2, (IUnaryFlowFunction) retf); if (D5 != null) { D5.foreach(new IntSetAction() { + @Override public void act(int d5) { propagate(edge.entry, edge.d1, returnSite, d5); } @@ -906,6 +917,7 @@ public class TabulationSolver { * * @return IntSet representing the bitvector */ + @Override public IntSet getResult(T node) { return TabulationSolver.this.getResult(node); } @@ -917,6 +929,7 @@ public class TabulationSolver { TreeMap> map = new TreeMap>(ToStringComparator.instance()); Comparator c = new Comparator() { + @Override public int compare(Object o1, Object o2) { if (!(o1 instanceof IBasicBlock)) { return -1; @@ -951,6 +964,7 @@ public class TabulationSolver { /* * @see com.ibm.wala.dataflow.IFDS.TabulationResult#getProblem() */ + @Override public TabulationProblem getProblem() { return problem; } @@ -958,6 +972,7 @@ public class TabulationSolver { /* * @see com.ibm.wala.dataflow.IFDS.TabulationResult#getSupergraphNodesReached() */ + @Override public Collection getSupergraphNodesReached() { Collection result = HashSetFactory.make(); for (Entry e : pathEdges.entrySet()) { @@ -978,6 +993,7 @@ public class TabulationSolver { * @param n2 * @return set of d2 s.t. (n1,d1) -> (n2,d2) is recorded as a summary edge, or null if none found */ + @Override public IntSet getSummaryTargets(T n1, int d1, T n2) { LocalSummaryEdges summaries = summaryEdges.get(supergraph.getProcOf(n1)); if (summaries == null) { @@ -988,6 +1004,7 @@ public class TabulationSolver { return summaries.getSummaryEdges(num1, num2, d1); } + @Override public Collection> getSeeds() { return TabulationSolver.this.getSeeds(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/UnorderedDomain.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/UnorderedDomain.java index 310e8dd16..f52eac1ce 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/UnorderedDomain.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/UnorderedDomain.java @@ -20,6 +20,7 @@ public class UnorderedDomain extends MutableMapping implements Tabulati /* * @see com.ibm.wala.dataflow.IFDS.TabulationDomain#isWeakerThan(int, int) */ + @Override public boolean hasPriorityOver(PathEdge p1, PathEdge p2) { return false; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/VectorGenFlowFunction.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/VectorGenFlowFunction.java index b3ecb23be..4335f702e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/VectorGenFlowFunction.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/VectorGenFlowFunction.java @@ -30,10 +30,12 @@ public class VectorGenFlowFunction implements IReversibleFlowFunction { assert gen.contains(0); } + @Override public IntSet getTargets(int i) { return (i == 0) ? gen : gen.contains(i) ? null : SparseIntSet.singleton(i); } + @Override public IntSet getSources(int i) { return (gen.contains(i)) ? SparseIntSet.singleton(0) : SparseIntSet.singleton(i); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/VectorKillFlowFunction.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/VectorKillFlowFunction.java index 7977ba86a..92204c7ce 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/VectorKillFlowFunction.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/VectorKillFlowFunction.java @@ -30,10 +30,12 @@ public class VectorKillFlowFunction implements IReversibleFlowFunction { this.kill = kill; } + @Override public IntSet getTargets(int i) { return (kill.contains(i)) ? null : SparseIntSet.singleton(i); } + @Override public IntSet getSources(int i) { return (kill.contains(i)) ? null : SparseIntSet.singleton(i); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/AbstractDemandPointsTo.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/AbstractDemandPointsTo.java index 752f155cb..ab31e4b69 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/AbstractDemandPointsTo.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/AbstractDemandPointsTo.java @@ -84,6 +84,7 @@ public abstract class AbstractDemandPointsTo implements IDemandPointerAnalysis { this.options = options; } + @Override public HeapModel getHeapModel() { return heapModel; } @@ -106,10 +107,12 @@ public abstract class AbstractDemandPointsTo implements IDemandPointerAnalysis { return numNodesTraversed; } + @Override public CallGraph getBaseCallGraph() { return cg; } + @Override public IClassHierarchy getClassHierarchy() { return cha; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/ContextSensitiveStateMachine.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/ContextSensitiveStateMachine.java index 200a93353..770414571 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/ContextSensitiveStateMachine.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/ContextSensitiveStateMachine.java @@ -81,6 +81,7 @@ public class ContextSensitiveStateMachine implements StateMachine { */ private final CallStack emptyStack = CallStack.emptyCallStack(); + @Override public CallStack getStartState() { return emptyStack; } @@ -97,46 +98,57 @@ public class ContextSensitiveStateMachine implements StateMachine { this.prevStack = prevStack; } + @Override public void visitAssign(AssignLabel label, Object dst) { nextState = prevStack; } + @Override public void visitAssignBar(AssignBarLabel label, Object dst) { nextState = prevStack; } + @Override public void visitAssignGlobal(AssignGlobalLabel label, Object dst) { nextState = emptyStack; } + @Override public void visitAssignGlobalBar(AssignGlobalBarLabel label, Object dst) { nextState = emptyStack; } + @Override public void visitGetField(GetFieldLabel label, Object dst) { nextState = prevStack; } + @Override public void visitGetFieldBar(GetFieldBarLabel label, Object dst) { nextState = prevStack; } + @Override public void visitMatch(MatchLabel label, Object dst) { nextState = emptyStack; } + @Override public void visitMatchBar(MatchBarLabel label, Object dst) { nextState = emptyStack; } + @Override public void visitNew(NewLabel label, Object dst) { nextState = prevStack; } + @Override public void visitNewBar(NewBarLabel label, Object dst) { nextState = prevStack; } + @Override public void visitParam(ParamLabel label, Object dst) { handleMethodExit(label.getCallSite()); } @@ -153,6 +165,7 @@ public class ContextSensitiveStateMachine implements StateMachine { } } + @Override public void visitParamBar(ParamBarLabel label, Object dst) { // method entry handleMethodEntry(label.getCallSite()); @@ -188,18 +201,22 @@ public class ContextSensitiveStateMachine implements StateMachine { } } + @Override public void visitPutField(PutFieldLabel label, Object dst) { nextState = prevStack; } + @Override public void visitPutFieldBar(PutFieldBarLabel label, Object dst) { nextState = prevStack; } + @Override public void visitReturn(ReturnLabel label, Object dst) { handleMethodEntry(label.getCallSite()); } + @Override public void visitReturnBar(ReturnBarLabel label, Object dst) { handleMethodExit(label.getCallSite()); } @@ -209,6 +226,7 @@ public class ContextSensitiveStateMachine implements StateMachine { /* * @see com.ibm.wala.demandpa.alg.statemachine.StateMachine#transition(com.ibm.wala.demandpa.alg.statemachine.StateMachine.State, java.lang.Object) */ + @Override public State transition(State prevState, IFlowLabel label) throws IllegalArgumentException, IllegalArgumentException { if (prevState == null) { throw new IllegalArgumentException("prevState == null"); @@ -252,6 +270,7 @@ public class ContextSensitiveStateMachine implements StateMachine { this(new BasicRecursionHandler()); } + @Override public StateMachine make() { return new ContextSensitiveStateMachine(prototype.makeNew()); } @@ -278,14 +297,17 @@ public class ContextSensitiveStateMachine implements StateMachine { private final HashSet recursiveCallSites = HashSetFactory.make(); + @Override public boolean isRecursive(CallerSiteContext callSite) { return recursiveCallSites.contains(callSite); } + @Override public void makeRecursive(Collection callSites) { recursiveCallSites.addAll(callSites); } + @Override public RecursionHandler makeNew() { return new BasicRecursionHandler(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java index b4e868da1..aa79d68a6 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java @@ -289,6 +289,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { Collection finalP2Set = Iterator2Collection.toSet(new MapIterator, T>(p2SetWithStates.iterator(), new Function, T>() { + @Override public T apply(WithState object) { return object.getWrapped(); } @@ -515,6 +516,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { * @return the points-to set of pk, or null if the points-to set can't be computed in the allocated * budget */ + @Override public Collection getPointsTo(PointerKey pk) { return getPointsTo(pk, Predicate. falsePred()).snd; } @@ -910,6 +912,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { final MutableIntSet tmp = intSetFactory.make(); vals.foreach(new IntSetAction() { + @Override public void act(int x) { InstanceKeyAndState ikAndState = ikAndStates.getMappedObject(x); if (cha.isAssignableFrom(concreteType, ikAndState.getInstanceKey().getConcreteType())) { @@ -923,6 +926,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { final MutableIntSet tmp = intSetFactory.make(); vals.foreach(new IntSetAction() { + @Override public void act(int x) { InstanceKeyAndState ikAndState = ikAndStates.getMappedObject(x); for (IClass t : ((MultipleClassesFilter) typeFilter).getConcreteTypes()) { @@ -939,6 +943,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { final MutableIntSet tmp = intSetFactory.make(); vals.foreach(new IntSetAction() { + @Override public void act(int x) { InstanceKeyAndState ikAndState = ikAndStates.getMappedObject(x); if (ikAndState.getInstanceKey().equals(theOnlyInstanceKey)) { @@ -980,6 +985,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { State curState = curPkAndState.getState(); doTransition(curState, label, new Function() { + @Override public Object apply(State nextState) { PointerKeyAndState succPkAndState = new PointerKeyAndState(succPk, nextState); handleCopy(curPkAndState, succPkAndState, label); @@ -1149,6 +1155,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { final PointerKey ret = heapModel.getPointerKeyForReturnValue(targetForCall); doTransition(receiverState, returnLabel, new Function() { + @Override public Object apply(State retState) { repropCallArg(defAndState, new PointerKeyAndState(ret, retState), returnLabel.bar()); return null; @@ -1161,6 +1168,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { final PointerKey excRet = heapModel.getPointerKeyForExceptionalReturnValue(targetForCall); doTransition(receiverState, returnLabel, new Function() { + @Override public Object apply(State excRetState) { repropCallArg(exc, new PointerKeyAndState(excRet, excRetState), returnLabel.bar()); return null; @@ -1173,6 +1181,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { final ParamBarLabel paramBarLabel = ParamBarLabel.make(new CallerSiteContext(caller, call)); doTransition(receiverState, paramBarLabel, new Function() { + @Override public Object apply(State formalState) { repropCallArg( new PointerKeyAndState(heapModel.getPointerKeyForLocal(targetForCall, formalNum), formalState), @@ -1243,6 +1252,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { } doTransition(curState, label, new Function() { + @Override public Object apply(State newState) { InstanceKeyAndState ikAndState = new InstanceKeyAndState(ik, newState); int n = ikAndStates.add(ikAndState); @@ -1339,6 +1349,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { } } + @Override public Object apply(State callerState) { // hack to get some actual parameter from call site // TODO do this better @@ -1627,6 +1638,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { } } + @Override public Object apply(State callerState) { // if (DEBUG) { // System.err.println("caller " + caller); @@ -1765,6 +1777,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { final PointerKey predPk = (PointerKey) readIter.next(); doTransition(curState, AssignGlobalBarLabel.v(), new Function() { + @Override public Object apply(State predPkState) { PointerKeyAndState predPkAndState = new PointerKeyAndState(predPk, predPkState); handleTrackedPred(trackedSet, predPkAndState, AssignGlobalBarLabel.v()); @@ -1796,6 +1809,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { final PointerKey predPk = readIter.next(); doTransition(curState, MatchBarLabel.v(), new Function() { + @Override public Object apply(State predPkState) { PointerKeyAndState predPkAndState = new PointerKeyAndState(predPk, predPkState); handleTrackedPred(trackedSet, predPkAndState, MatchBarLabel.v()); @@ -1834,6 +1848,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { final PointerKey predPk = (PointerKey) dst; doTransition(curState, label.bar(), new Function() { + @Override public Object apply(State predPkState) { PointerKeyAndState predPkAndState = new PointerKeyAndState(predPk, predPkState); handleTrackedPred(trackedSet, predPkAndState, label.bar()); @@ -1851,6 +1866,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { void handle(PointerKeyAndState src, final PointerKey dst, final IFlowLabel label) { assert src == curPkAndState; doTransition(curState, label, new Function() { + @Override public Object apply(State dstState) { PointerKeyAndState dstAndState = new PointerKeyAndState(dst, dstState); handleTrackedPred(trackedSet, dstAndState, label); @@ -2112,6 +2128,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { assert g.containsNode(actualPk); assert g.containsNode(localPk); doTransition(curState, paramLabel, new Function() { + @Override public Object apply(State nextState) { propagate(new PointerKeyAndState(actualPk, nextState)); return null; @@ -2121,6 +2138,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { } } + @Override public Object apply(State callerState) { // hack to get some actual parameter from call site // TODO do this better @@ -2164,6 +2182,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { assert g.containsNode(retVal); doTransition(curState, ReturnLabel.make(callSiteAndCGNode), new Function() { + @Override public Object apply(State nextState) { propagate(new PointerKeyAndState(retVal, nextState)); return null; @@ -2185,6 +2204,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { assert g.containsNode(retVal); doTransition(curState, ReturnLabel.make(callSiteAndCGNode), new Function() { + @Override public Object apply(State nextState) { propagate(new PointerKeyAndState(retVal, nextState)); return null; @@ -2287,6 +2307,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { } doTransition(curState, label, new Function() { + @Override public Object apply(State newState) { // just check if ik violates the pred if (!pred.test(ik)) { @@ -2341,6 +2362,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { final PointerKey writtenPk = writesToInstanceField.next(); doTransition(curState, MatchLabel.v(), new Function() { + @Override public Object apply(State nextState) { h.propagate(new PointerKeyAndState(writtenPk, nextState)); return null; @@ -2398,6 +2420,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { final PointerKey writtenPk = (PointerKey) writesToStaticField.next(); doTransition(curState, label, new Function() { + @Override public Object apply(State nextState) { h.propagate(new PointerKeyAndState(writtenPk, nextState)); return null; @@ -2413,6 +2436,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { final PointerKey succPk = (PointerKey) dst; doTransition(curState, label, new Function() { + @Override public Object apply(State nextState) { h.propagate(new PointerKeyAndState(succPk, nextState)); return null; diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/IntraProcFilter.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/IntraProcFilter.java index b242de4d6..2ffd80b75 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/IntraProcFilter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/IntraProcFilter.java @@ -58,6 +58,7 @@ public class IntraProcFilter implements StateMachine { private static final State DUMMY = new State() { }; + @Override public State getStartState() { return DUMMY; } @@ -87,6 +88,7 @@ public class IntraProcFilter implements StateMachine { } + @Override public State transition(State prevState, IFlowLabel label) throws IllegalArgumentException { if (label == null) { throw new IllegalArgumentException("label == null"); @@ -102,6 +104,7 @@ public class IntraProcFilter implements StateMachine { public static class Factory implements StateMachineFactory { + @Override public StateMachine make() { return new IntraProcFilter(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/SimpleDemandPointsTo.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/SimpleDemandPointsTo.java index 6d245a4a3..12eddfb51 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/SimpleDemandPointsTo.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/SimpleDemandPointsTo.java @@ -69,6 +69,7 @@ public class SimpleDemandPointsTo extends AbstractDemandPointsTo { super(cg, model, fam, cha, options); } + @Override @SuppressWarnings("unchecked") public Collection getPointsTo(PointerKey pk) throws IllegalArgumentException, UnimplementedError { diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/ThisFilteringHeapModel.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/ThisFilteringHeapModel.java index 3a47adc05..673d2d377 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/ThisFilteringHeapModel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/ThisFilteringHeapModel.java @@ -42,46 +42,57 @@ class ThisFilteringHeapModel implements HeapModel { private final IClassHierarchy cha; + @Override public IClassHierarchy getClassHierarchy() { return delegate.getClassHierarchy(); } + @Override public FilteredPointerKey getFilteredPointerKeyForLocal(CGNode node, int valueNumber, TypeFilter filter) { return delegate.getFilteredPointerKeyForLocal(node, valueNumber, filter); } + @Override public InstanceKey getInstanceKeyForAllocation(CGNode node, NewSiteReference allocation) { return delegate.getInstanceKeyForAllocation(node, allocation); } + @Override public InstanceKey getInstanceKeyForClassObject(TypeReference type) { return delegate.getInstanceKeyForClassObject(type); } + @Override public InstanceKey getInstanceKeyForConstant(TypeReference type, Object S) { return delegate.getInstanceKeyForConstant(type, S); } + @Override public InstanceKey getInstanceKeyForMultiNewArray(CGNode node, NewSiteReference allocation, int dim) { return delegate.getInstanceKeyForMultiNewArray(node, allocation, dim); } + @Override public InstanceKey getInstanceKeyForPEI(CGNode node, ProgramCounter instr, TypeReference type) { return delegate.getInstanceKeyForPEI(node, instr, type); } + @Override public PointerKey getPointerKeyForArrayContents(InstanceKey I) { return delegate.getPointerKeyForArrayContents(I); } + @Override public PointerKey getPointerKeyForExceptionalReturnValue(CGNode node) { return delegate.getPointerKeyForExceptionalReturnValue(node); } + @Override public PointerKey getPointerKeyForInstanceField(InstanceKey I, IField field) { return delegate.getPointerKeyForInstanceField(I, field); } + @Override public PointerKey getPointerKeyForLocal(CGNode node, int valueNumber) { if (!node.getMethod().isStatic() && valueNumber == 1) { return delegate.getFilteredPointerKeyForLocal(node, valueNumber, getFilter(node)); @@ -119,14 +130,17 @@ class ThisFilteringHeapModel implements HeapModel { return C; } + @Override public PointerKey getPointerKeyForReturnValue(CGNode node) { return delegate.getPointerKeyForReturnValue(node); } + @Override public PointerKey getPointerKeyForStaticField(IField f) { return delegate.getPointerKeyForStaticField(f); } + @Override public Iterator iteratePointerKeys() { return delegate.iteratePointerKeys(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/AbstractRefinementPolicy.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/AbstractRefinementPolicy.java index 2d69ee655..36936b043 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/AbstractRefinementPolicy.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/AbstractRefinementPolicy.java @@ -55,22 +55,27 @@ public abstract class AbstractRefinementPolicy implements RefinementPolicy { this(fieldRefinePolicy, cgRefinePolicy, DEFAULT_NUM_PASSES, DEFAULT_BUDGET_PER_PASS); } + @Override public int getBudgetForPass(int passNum) { return budgetPerPass[passNum]; } + @Override public CallGraphRefinePolicy getCallGraphRefinePolicy() { return cgRefinePolicy; } + @Override public FieldRefinePolicy getFieldRefinePolicy() { return fieldRefinePolicy; } + @Override public int getNumPasses() { return numPasses; } + @Override public boolean nextPass() { // don't short-circuit since nextPass() can have side-effects boolean fieldNextPass = fieldRefinePolicy.nextPass(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/AlwaysRefineCGPolicy.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/AlwaysRefineCGPolicy.java index 05faaa6c0..580dd66f8 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/AlwaysRefineCGPolicy.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/AlwaysRefineCGPolicy.java @@ -44,10 +44,12 @@ import com.ibm.wala.ipa.callgraph.propagation.cfa.CallerSiteContext; */ public class AlwaysRefineCGPolicy implements CallGraphRefinePolicy { + @Override public boolean shouldRefine(CallerSiteContext callSiteAndCGNode) { return true; } + @Override public boolean nextPass() { return false; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/AlwaysRefineFieldsPolicy.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/AlwaysRefineFieldsPolicy.java index 43efd3747..5acf41006 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/AlwaysRefineFieldsPolicy.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/AlwaysRefineFieldsPolicy.java @@ -52,10 +52,12 @@ import com.ibm.wala.ipa.callgraph.propagation.PointerKey; */ public class AlwaysRefineFieldsPolicy implements FieldRefinePolicy { + @Override public boolean shouldRefine(IField field, PointerKey basePtr, PointerKey val, IFlowLabel label, StateMachine.State state) { return true; } + @Override public boolean nextPass() { return false; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/DelegatingFieldRefinePolicy.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/DelegatingFieldRefinePolicy.java index db88c03a4..42be600ed 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/DelegatingFieldRefinePolicy.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/DelegatingFieldRefinePolicy.java @@ -35,6 +35,7 @@ public class DelegatingFieldRefinePolicy implements FieldRefinePolicy { B = b; } + @Override public boolean nextPass() { // careful not to short-circuit here, since nextPass() can have side-effects boolean AnextPass = A.nextPass(); @@ -48,6 +49,7 @@ public class DelegatingFieldRefinePolicy implements FieldRefinePolicy { * if A.shouldRefine(field) is true, * B.shouldRefine(field) is not called. */ + @Override public boolean shouldRefine(IField field, PointerKey basePtr, PointerKey val, IFlowLabel label, StateMachine.State state) { // make code explicit to avoid subtle reliance on short-circuiting boolean AshouldRefine = A.shouldRefine(field, basePtr, val, label, state); diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/ManualCGRefinePolicy.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/ManualCGRefinePolicy.java index bb6e79014..4ace6d1d6 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/ManualCGRefinePolicy.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/ManualCGRefinePolicy.java @@ -47,6 +47,7 @@ import com.ibm.wala.types.MethodReference; */ public class ManualCGRefinePolicy implements CallGraphRefinePolicy { + @Override public boolean shouldRefine(CallerSiteContext callSiteAndCGNode) throws IllegalArgumentException { if (callSiteAndCGNode == null) { throw new IllegalArgumentException("callSiteAndCGNode == null"); @@ -58,6 +59,7 @@ public class ManualCGRefinePolicy implements CallGraphRefinePolicy { return true; } + @Override public boolean nextPass() { return false; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/ManualFieldPolicy.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/ManualFieldPolicy.java index 63f7aeb14..e72b8bf84 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/ManualFieldPolicy.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/ManualFieldPolicy.java @@ -67,6 +67,7 @@ public class ManualFieldPolicy implements FieldRefinePolicy { final private IClass[] encounteredClasses = new IClass[NUM_DECISIONS_TO_TRACK]; + @Override public boolean shouldRefine(IField field, PointerKey basePtr, PointerKey val, IFlowLabel label, StateMachine.State state) { if (field == null) { throw new IllegalArgumentException("null field"); @@ -132,6 +133,7 @@ public class ManualFieldPolicy implements FieldRefinePolicy { this.refinePattern = refinePattern; } + @Override public boolean nextPass() { return false; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/ManualRefinementPolicy.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/ManualRefinementPolicy.java index 970b00a04..cba42952d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/ManualRefinementPolicy.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/ManualRefinementPolicy.java @@ -58,6 +58,7 @@ public class ManualRefinementPolicy extends AbstractRefinementPolicy { this.cha = cha; } + @Override public RefinementPolicy make() { return new ManualRefinementPolicy(cha); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/NeverRefineCGPolicy.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/NeverRefineCGPolicy.java index 6dd2909a4..a254796c2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/NeverRefineCGPolicy.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/NeverRefineCGPolicy.java @@ -41,10 +41,12 @@ import com.ibm.wala.ipa.callgraph.propagation.cfa.CallerSiteContext; public class NeverRefineCGPolicy implements CallGraphRefinePolicy { + @Override public boolean shouldRefine(CallerSiteContext callSiteAndCGNode) { return false; } + @Override public boolean nextPass() { return false; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/NeverRefineFieldsPolicy.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/NeverRefineFieldsPolicy.java index 59fadf137..0604e9b7c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/NeverRefineFieldsPolicy.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/NeverRefineFieldsPolicy.java @@ -44,10 +44,12 @@ import com.ibm.wala.ipa.callgraph.propagation.PointerKey; public class NeverRefineFieldsPolicy implements FieldRefinePolicy { + @Override public boolean shouldRefine(IField field, PointerKey basePtr, PointerKey val, IFlowLabel label, StateMachine.State state) { return false; } + @Override public boolean nextPass() { return false; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/SinglePassRefinementPolicy.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/SinglePassRefinementPolicy.java index 04f4fc7ee..7ddc7b467 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/SinglePassRefinementPolicy.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/SinglePassRefinementPolicy.java @@ -73,6 +73,7 @@ public class SinglePassRefinementPolicy extends AbstractRefinementPolicy { } + @Override public RefinementPolicy make() { return new SinglePassRefinementPolicy(fieldRefinePolicy, cgRefinePolicy, budget); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/TunedFieldRefinementPolicy.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/TunedFieldRefinementPolicy.java index 58119d9ef..fb03684aa 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/TunedFieldRefinementPolicy.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/TunedFieldRefinementPolicy.java @@ -33,6 +33,7 @@ public class TunedFieldRefinementPolicy implements FieldRefinePolicy { private IClass firstSkippedClass = null; + @Override public boolean nextPass() { if (firstSkippedClass != null) { typesToRefine.add(firstSkippedClass); @@ -46,6 +47,7 @@ public class TunedFieldRefinementPolicy implements FieldRefinePolicy { } } + @Override public boolean shouldRefine(IField field, PointerKey basePtr, PointerKey val, IFlowLabel label, StateMachine.State state) { if (field == null) { throw new IllegalArgumentException("null field"); diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/TunedRefinementPolicy.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/TunedRefinementPolicy.java index d40b4e39a..ec1dd4c0b 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/TunedRefinementPolicy.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/refinepolicy/TunedRefinementPolicy.java @@ -60,6 +60,7 @@ public class TunedRefinementPolicy extends AbstractRefinementPolicy { this.cha = cha; } + @Override public RefinementPolicy make() { return new TunedRefinementPolicy(cha); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/statemachine/DummyStateMachine.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/statemachine/DummyStateMachine.java index 15d776027..f268bfc7e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/statemachine/DummyStateMachine.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/statemachine/DummyStateMachine.java @@ -48,6 +48,7 @@ public class DummyStateMachine implements StateMachine { public static class Factory implements StateMachineFactory { + @Override public StateMachine make() { return new DummyStateMachine(); } @@ -66,10 +67,12 @@ public class DummyStateMachine implements StateMachine { * * @see statemachine.StateMachine#transition(int, java.lang.Object) */ + @Override public State transition(State prevState, T label) { return DUMMY; } + @Override public State getStartState() { return DUMMY; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractDemandFlowGraph.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractDemandFlowGraph.java index d39d2465d..a5416d4d7 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractDemandFlowGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractDemandFlowGraph.java @@ -88,6 +88,7 @@ public abstract class AbstractDemandFlowGraph extends AbstractFlowGraph { /* * @see com.ibm.wala.demandpa.flowgraph.IFlowGraph#addSubgraphForNode(com.ibm.wala.ipa.callgraph.CGNode) */ + @Override public void addSubgraphForNode(CGNode node) throws IllegalArgumentException { if (node == null) { throw new IllegalArgumentException("node == null"); @@ -108,6 +109,7 @@ public abstract class AbstractDemandFlowGraph extends AbstractFlowGraph { /* * @see com.ibm.wala.demandpa.flowgraph.IFlowGraph#hasSubgraphForNode(com.ibm.wala.ipa.callgraph.CGNode) */ + @Override public boolean hasSubgraphForNode(CGNode node) { return cgNodesVisited.contains(cg.getNumber(node)); } @@ -352,6 +354,7 @@ public abstract class AbstractDemandFlowGraph extends AbstractFlowGraph { final Map> callerCache = HashMapFactory.make(); + @Override public Set getPotentialCallers(PointerKey formalPk) { CGNode callee = null; if (formalPk instanceof LocalPointerKey) { @@ -376,6 +379,7 @@ public abstract class AbstractDemandFlowGraph extends AbstractFlowGraph { return ret; } + @Override public Set getPossibleTargets(CGNode node, CallSiteReference site, LocalPointerKey actualPk) { return cg.getPossibleTargets(node, site); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowGraph.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowGraph.java index 84c081578..d37bd23f0 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowGraph.java @@ -96,14 +96,17 @@ import com.ibm.wala.util.graph.labeled.SlowSparseNumberedLabeledGraph; public abstract class AbstractFlowGraph extends SlowSparseNumberedLabeledGraph implements IFlowGraph { private final static IFlowLabel defaultLabel = new IFlowLabel() { + @Override public IFlowLabel bar() { return defaultLabel; } + @Override public boolean isBarred() { return false; } + @Override public void visit(IFlowLabelVisitor v, Object dst) { } @@ -153,6 +156,7 @@ public abstract class AbstractFlowGraph extends SlowSparseNumberedLabeledGraph succLabelIter = getSuccLabels(node); succLabelIter.hasNext();) { final IFlowLabel label = succLabelIter.next(); @@ -166,6 +170,7 @@ public abstract class AbstractFlowGraph extends SlowSparseNumberedLabeledGraph predLabelIter = getPredLabels(node); predLabelIter.hasNext();) { final IFlowLabel label = predLabelIter.next(); @@ -210,10 +215,12 @@ public abstract class AbstractFlowGraph extends SlowSparseNumberedLabeledGraph getInstrsPassingParam(LocalPointerKey pk) { Set instrs = callParams.get(pk); if (instrs == null) { @@ -223,10 +230,12 @@ public abstract class AbstractFlowGraph extends SlowSparseNumberedLabeledGraph getWritesToStaticField(StaticFieldKey sfk) throws IllegalArgumentException { if (sfk == null) { throw new IllegalArgumentException("sfk == null"); @@ -238,6 +247,7 @@ public abstract class AbstractFlowGraph extends SlowSparseNumberedLabeledGraph getReadsOfStaticField(StaticFieldKey sfk) throws IllegalArgumentException { if (sfk == null) { throw new IllegalArgumentException("sfk == null"); @@ -249,6 +259,7 @@ public abstract class AbstractFlowGraph extends SlowSparseNumberedLabeledGraph getWritesToInstanceField(PointerKey pk, IField f) { // TODO: cache this!! if (f == ArrayContents.v()) { @@ -309,6 +320,7 @@ public abstract class AbstractFlowGraph extends SlowSparseNumberedLabeledGraph getReadsOfInstanceField(PointerKey pk, IField f) { // TODO: cache this!! if (f == ArrayContents.v()) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowLabelVisitor.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowLabelVisitor.java index 2bf727da7..0f3fccdea 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowLabelVisitor.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowLabelVisitor.java @@ -48,65 +48,81 @@ import com.ibm.wala.demandpa.flowgraph.IFlowLabel.IFlowLabelVisitor; */ public class AbstractFlowLabelVisitor implements IFlowLabelVisitor { + @Override public void visitParam(ParamLabel label, Object dst) { } + @Override public void visitReturn(ReturnLabel label, Object dst) { } + @Override public void visitAssign(AssignLabel label, Object dst) { } + @Override public void visitAssignGlobal(AssignGlobalLabel label, Object dst) { } + @Override public void visitGetField(GetFieldLabel label, Object dst) { } + @Override public void visitMatch(MatchLabel label, Object dst) { } + @Override public void visitNew(NewLabel label, Object dst) { } + @Override public void visitPutField(PutFieldLabel label, Object dst) { } + @Override public void visitAssignGlobalBar(AssignGlobalBarLabel label, Object dst) { } + @Override public void visitAssignBar(AssignBarLabel label, Object dst) { } + @Override public void visitGetFieldBar(GetFieldBarLabel label, Object dst) { } + @Override public void visitMatchBar(MatchBarLabel label, Object dst) { } + @Override public void visitNewBar(NewBarLabel label, Object dst) { } + @Override public void visitPutFieldBar(PutFieldBarLabel label, Object dst) { } + @Override public void visitReturnBar(ReturnBarLabel label, Object dst) { } + @Override public void visitParamBar(ParamBarLabel label, Object dst) { } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AssignBarLabel.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AssignBarLabel.java index 60de67fd3..dc0a1acc0 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AssignBarLabel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AssignBarLabel.java @@ -65,6 +65,7 @@ public class AssignBarLabel implements IFlowLabelWithFilter { * (non-Javadoc) * @see demandGraph.IFlowLabel#bar() */ + @Override public AssignLabel bar() { return (this == noFilter) ? AssignLabel.noFilter() : AssignLabel.make(filter); } @@ -73,6 +74,7 @@ public class AssignBarLabel implements IFlowLabelWithFilter { * (non-Javadoc) * @see demandGraph.IFlowLabel#visit(demandGraph.IFlowLabel.IFlowLabelVisitor, java.lang.Object) */ + @Override public void visit(IFlowLabelVisitor v, Object dst) throws IllegalArgumentException { if (v == null) { throw new IllegalArgumentException("v == null"); @@ -80,6 +82,7 @@ public class AssignBarLabel implements IFlowLabelWithFilter { v.visitAssignBar(this, dst); } + @Override public boolean isBarred() { return true; } @@ -109,6 +112,7 @@ public class AssignBarLabel implements IFlowLabelWithFilter { return true; } + @Override public TypeFilter getFilter() { return filter; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AssignGlobalBarLabel.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AssignGlobalBarLabel.java index 3baaa6005..b5894878e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AssignGlobalBarLabel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AssignGlobalBarLabel.java @@ -57,6 +57,7 @@ public class AssignGlobalBarLabel implements IFlowLabel { * * @see demandGraph.IFlowLabel#bar() */ + @Override public AssignGlobalLabel bar() { return AssignGlobalLabel.v(); } @@ -67,6 +68,7 @@ public class AssignGlobalBarLabel implements IFlowLabel { * @see demandGraph.IFlowLabel#visit(demandGraph.IFlowLabel.IFlowLabelVisitor, * java.lang.Object) */ + @Override public void visit(IFlowLabelVisitor v, Object dst) throws IllegalArgumentException { if (v == null) { throw new IllegalArgumentException("v == null"); @@ -74,6 +76,7 @@ public class AssignGlobalBarLabel implements IFlowLabel { v.visitAssignGlobalBar(this, dst); } + @Override public boolean isBarred() { return true; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AssignGlobalLabel.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AssignGlobalLabel.java index 942971535..f96df15e7 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AssignGlobalLabel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AssignGlobalLabel.java @@ -47,6 +47,7 @@ public class AssignGlobalLabel implements IFlowLabel { return theInstance; } + @Override public void visit(IFlowLabelVisitor v, Object dst) throws IllegalArgumentException { if (v == null) { throw new IllegalArgumentException("v == null"); @@ -54,10 +55,12 @@ public class AssignGlobalLabel implements IFlowLabel { v.visitAssignGlobal(this, dst); } + @Override public AssignGlobalBarLabel bar() { return AssignGlobalBarLabel.v(); } + @Override public boolean isBarred() { return false; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AssignLabel.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AssignLabel.java index 9a8e12eff..4ab9d4db1 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AssignLabel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AssignLabel.java @@ -82,6 +82,7 @@ public class AssignLabel implements IFlowLabelWithFilter { return new AssignLabel(filter); } + @Override public void visit(IFlowLabelVisitor v, Object dst) throws IllegalArgumentException { if (v == null) { throw new IllegalArgumentException("v == null"); @@ -89,6 +90,7 @@ public class AssignLabel implements IFlowLabelWithFilter { v.visitAssign(this, dst); } + @Override public AssignBarLabel bar() { return this == noFilter ? AssignBarLabel.noFilter() : AssignBarLabel.make(filter); } @@ -98,10 +100,12 @@ public class AssignLabel implements IFlowLabelWithFilter { return "assign"; } + @Override public boolean isBarred() { return false; } + @Override public TypeFilter getFilter() { return filter; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/DemandPointerFlowGraph.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/DemandPointerFlowGraph.java index 556eee4f0..f5ace68e0 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/DemandPointerFlowGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/DemandPointerFlowGraph.java @@ -477,6 +477,7 @@ public class DemandPointerFlowGraph extends AbstractDemandFlowGraph implements I /** * The calling loop must call this in each iteration! */ + @Override public void setBasicBlock(ISSABasicBlock block) { basicBlock = block; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/DemandValueFlowGraph.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/DemandValueFlowGraph.java index a7f6475cf..1113dd36b 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/DemandValueFlowGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/DemandValueFlowGraph.java @@ -444,6 +444,7 @@ public class DemandValueFlowGraph extends AbstractDemandFlowGraph { /** * The calling loop must call this in each iteration! */ + @Override public void setBasicBlock(ISSABasicBlock block) { basicBlock = block; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/GetFieldBarLabel.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/GetFieldBarLabel.java index 8acfe1397..536ba189f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/GetFieldBarLabel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/GetFieldBarLabel.java @@ -65,6 +65,7 @@ public class GetFieldBarLabel implements IFlowLabel { * * @see demandGraph.IFlowLabel#bar() */ + @Override public GetFieldLabel bar() { return GetFieldLabel.make(field); } @@ -75,6 +76,7 @@ public class GetFieldBarLabel implements IFlowLabel { * @see demandGraph.IFlowLabel#visit(demandGraph.IFlowLabel.IFlowLabelVisitor, * java.lang.Object) */ + @Override public void visit(IFlowLabelVisitor v, Object dst) throws IllegalArgumentException { if (v == null) { throw new IllegalArgumentException("v == null"); @@ -107,6 +109,7 @@ public class GetFieldBarLabel implements IFlowLabel { return true; } + @Override public boolean isBarred() { return true; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/GetFieldLabel.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/GetFieldLabel.java index bccddfcfb..f110db428 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/GetFieldLabel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/GetFieldLabel.java @@ -81,6 +81,7 @@ public class GetFieldLabel implements IFlowLabel { return true; } + @Override public void visit(IFlowLabelVisitor v, Object dst) throws IllegalArgumentException { if (v == null) { throw new IllegalArgumentException("v == null"); @@ -93,10 +94,12 @@ public class GetFieldLabel implements IFlowLabel { return "getfield[" + field + "]"; } + @Override public GetFieldBarLabel bar() { return GetFieldBarLabel.make(field); } + @Override public boolean isBarred() { return false; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/MatchBarLabel.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/MatchBarLabel.java index 9b0a45b19..fa75bd414 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/MatchBarLabel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/MatchBarLabel.java @@ -55,6 +55,7 @@ public class MatchBarLabel implements IFlowLabel { /* * @see demandGraph.IFlowLabel#bar() */ + @Override public MatchLabel bar() { return MatchLabel.v(); } @@ -63,6 +64,7 @@ public class MatchBarLabel implements IFlowLabel { * @see demandGraph.IFlowLabel#visit(demandGraph.IFlowLabel.IFlowLabelVisitor, * java.lang.Object) */ + @Override public void visit(IFlowLabelVisitor v, Object dst) throws IllegalArgumentException { if (v == null) { throw new IllegalArgumentException("v == null"); @@ -70,6 +72,7 @@ public class MatchBarLabel implements IFlowLabel { v.visitMatchBar(this, dst); } + @Override public boolean isBarred() { return true; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/MatchLabel.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/MatchLabel.java index d4da54995..0d8c26ee1 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/MatchLabel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/MatchLabel.java @@ -48,6 +48,7 @@ public class MatchLabel implements IFlowLabel { return theInstance; } + @Override public void visit(IFlowLabelVisitor v, Object dst) throws IllegalArgumentException { if (v == null) { throw new IllegalArgumentException("v == null"); @@ -60,10 +61,12 @@ public class MatchLabel implements IFlowLabel { return "match"; } + @Override public MatchBarLabel bar() { return MatchBarLabel.v(); } + @Override public boolean isBarred() { return false; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/NewBarLabel.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/NewBarLabel.java index d56e45926..507ea2af9 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/NewBarLabel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/NewBarLabel.java @@ -55,6 +55,7 @@ public class NewBarLabel implements IFlowLabel { /* * @see demandGraph.IFlowLabel#bar() */ + @Override public NewLabel bar() { return NewLabel.v(); } @@ -63,6 +64,7 @@ public class NewBarLabel implements IFlowLabel { * @see demandGraph.IFlowLabel#visit(demandGraph.IFlowLabel.IFlowLabelVisitor, * java.lang.Object) */ + @Override public void visit(IFlowLabelVisitor v, Object dst) throws IllegalArgumentException { if (v == null) { throw new IllegalArgumentException("v == null"); @@ -70,6 +72,7 @@ public class NewBarLabel implements IFlowLabel { v.visitNewBar(this, dst); } + @Override public boolean isBarred() { return true; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/NewLabel.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/NewLabel.java index a1209ec91..e7e4ca898 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/NewLabel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/NewLabel.java @@ -48,6 +48,7 @@ public class NewLabel implements IFlowLabel { return theInstance; } + @Override public void visit(IFlowLabelVisitor v, Object dst) throws IllegalArgumentException { if (v == null) { throw new IllegalArgumentException("v == null"); @@ -60,10 +61,12 @@ public class NewLabel implements IFlowLabel { return "new"; } + @Override public NewBarLabel bar() { return NewBarLabel.v(); } + @Override public boolean isBarred() { return false; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/ParamBarLabel.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/ParamBarLabel.java index eaabf93c2..9c0e1e7a4 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/ParamBarLabel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/ParamBarLabel.java @@ -54,6 +54,7 @@ public class ParamBarLabel extends CallLabel { /* * @see demandGraph.IFlowLabel#bar() */ + @Override public ParamLabel bar() { return ParamLabel.make(callSite); } @@ -62,6 +63,7 @@ public class ParamBarLabel extends CallLabel { * @see demandGraph.IFlowLabel#visit(demandGraph.IFlowLabel.IFlowLabelVisitor, * java.lang.Object) */ + @Override public void visit(IFlowLabelVisitor v, Object dst) throws IllegalArgumentException { if (v == null) { throw new IllegalArgumentException("v == null"); @@ -69,6 +71,7 @@ public class ParamBarLabel extends CallLabel { v.visitParamBar(this, dst); } + @Override public boolean isBarred() { return true; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/ParamLabel.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/ParamLabel.java index 085b0655c..c8bf1a222 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/ParamLabel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/ParamLabel.java @@ -49,6 +49,7 @@ public class ParamLabel extends CallLabel { return new ParamLabel(callSite); } + @Override public void visit(IFlowLabelVisitor v, Object dst) throws IllegalArgumentException { if (v == null) { throw new IllegalArgumentException("v == null"); @@ -61,10 +62,12 @@ public class ParamLabel extends CallLabel { return "param[" + callSite + "]"; } + @Override public ParamBarLabel bar() { return ParamBarLabel.make(callSite); } + @Override public boolean isBarred() { return false; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/PutFieldBarLabel.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/PutFieldBarLabel.java index e920d1986..8eda14875 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/PutFieldBarLabel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/PutFieldBarLabel.java @@ -88,6 +88,7 @@ public class PutFieldBarLabel implements IFlowLabel { /* * @see demandGraph.IFlowLabel#bar() */ + @Override public PutFieldLabel bar() { return PutFieldLabel.make(field); } @@ -96,6 +97,7 @@ public class PutFieldBarLabel implements IFlowLabel { * @see demandGraph.IFlowLabel#visit(demandGraph.IFlowLabel.IFlowLabelVisitor, * java.lang.Object) */ + @Override public void visit(IFlowLabelVisitor v, Object dst) throws IllegalArgumentException { if (v == null) { throw new IllegalArgumentException("v == null"); @@ -103,6 +105,7 @@ public class PutFieldBarLabel implements IFlowLabel { v.visitPutFieldBar(this, dst); } + @Override public boolean isBarred() { return true; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/PutFieldLabel.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/PutFieldLabel.java index fe634f986..bad59690d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/PutFieldLabel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/PutFieldLabel.java @@ -81,6 +81,7 @@ public class PutFieldLabel implements IFlowLabel { return true; } + @Override public void visit(IFlowLabelVisitor v, Object dst) throws IllegalArgumentException { if (v == null) { throw new IllegalArgumentException("v == null"); @@ -93,10 +94,12 @@ public class PutFieldLabel implements IFlowLabel { return "putfield[" + field + "]"; } + @Override public PutFieldBarLabel bar() { return PutFieldBarLabel.make(field); } + @Override public boolean isBarred() { return false; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/ReturnBarLabel.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/ReturnBarLabel.java index 04f17a178..1dfc83f10 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/ReturnBarLabel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/ReturnBarLabel.java @@ -54,6 +54,7 @@ public class ReturnBarLabel extends CallLabel { /* * @see demandGraph.IFlowLabel#bar() */ + @Override public ReturnLabel bar() { return ReturnLabel.make(callSite); } @@ -62,6 +63,7 @@ public class ReturnBarLabel extends CallLabel { * @see demandGraph.IFlowLabel#visit(demandGraph.IFlowLabel.IFlowLabelVisitor, * java.lang.Object) */ + @Override public void visit(IFlowLabelVisitor v, Object dst) throws IllegalArgumentException { if (v == null) { throw new IllegalArgumentException("v == null"); @@ -69,6 +71,7 @@ public class ReturnBarLabel extends CallLabel { v.visitReturnBar(this, dst); } + @Override public boolean isBarred() { return true; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/ReturnLabel.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/ReturnLabel.java index 70ca370b9..061d82231 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/ReturnLabel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/ReturnLabel.java @@ -49,6 +49,7 @@ public class ReturnLabel extends CallLabel { return new ReturnLabel(callSite); } + @Override public void visit(IFlowLabelVisitor v, Object dst) throws IllegalArgumentException { if (v == null) { throw new IllegalArgumentException("v == null"); @@ -61,10 +62,12 @@ public class ReturnLabel extends CallLabel { return "return[" + callSite + "]"; } + @Override public ReturnBarLabel bar() { return ReturnBarLabel.make(callSite); } + @Override public boolean isBarred() { return false; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/ArrayContents.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/ArrayContents.java index 17e4c55bb..fd3290f58 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/ArrayContents.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/ArrayContents.java @@ -68,40 +68,48 @@ public class ArrayContents implements IField { private ArrayContents() { } + @Override public TypeReference getFieldTypeReference() throws UnimplementedError { Assertions.UNREACHABLE(); return null; } + @Override public boolean isFinal() throws UnimplementedError { Assertions.UNREACHABLE(); return false; } + @Override public boolean isPrivate() throws UnimplementedError { Assertions.UNREACHABLE(); return false; } + @Override public boolean isProtected() throws UnimplementedError { Assertions.UNREACHABLE(); return false; } + @Override public boolean isPublic() throws UnimplementedError { Assertions.UNREACHABLE(); return false; } + @Override public boolean isStatic() throws UnimplementedError { Assertions.UNREACHABLE(); return false; } + @Override public IClass getDeclaringClass() throws UnsupportedOperationException { throw new UnsupportedOperationException(); } + @Override public Atom getName() throws UnimplementedError { Assertions.UNREACHABLE(); return null; @@ -112,19 +120,23 @@ public class ArrayContents implements IField { return "arr"; } + @Override public boolean isVolatile() { return false; } + @Override public ClassHierarchy getClassHierarchy() throws UnimplementedError { Assertions.UNREACHABLE(); return null; } + @Override public FieldReference getReference() { return null; } + @Override public Collection getAnnotations() { return Collections.emptySet(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/PABasedMemoryAccessMap.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/PABasedMemoryAccessMap.java index 78ec0af5b..a47276ad2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/PABasedMemoryAccessMap.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/PABasedMemoryAccessMap.java @@ -70,6 +70,7 @@ public class PABasedMemoryAccessMap implements MemoryAccessMap { invRef = MapUtil.inverseMap(ref); } + @Override public Collection getArrayReads(PointerKey arrayRef) { Collection memAccesses = new ArrayList(); if (DEBUG) { @@ -82,6 +83,7 @@ public class PABasedMemoryAccessMap implements MemoryAccessMap { return memAccesses; } + @Override public Collection getArrayWrites(PointerKey arrayRef) { Collection memAccesses = new ArrayList(); if (DEBUG) { @@ -97,6 +99,7 @@ public class PABasedMemoryAccessMap implements MemoryAccessMap { return memAccesses; } + @Override public Collection getFieldReads(PointerKey baseRef, IField field) { Collection memAccesses = new ArrayList(); for (InstanceKey ik : pa.getPointsToSet(baseRef)) { @@ -106,6 +109,7 @@ public class PABasedMemoryAccessMap implements MemoryAccessMap { return memAccesses; } + @Override public Collection getFieldWrites(PointerKey baseRef, IField field) { Collection memAccesses = new ArrayList(); for (InstanceKey ik : pa.getPointsToSet(baseRef)) { @@ -115,12 +119,14 @@ public class PABasedMemoryAccessMap implements MemoryAccessMap { return memAccesses; } + @Override public Collection getStaticFieldReads(IField field) { Collection result = new ArrayList(); convertStmtsToMemoryAccess(invRef.get(heapModel.getPointerKeyForStaticField(field)), result); return result; } + @Override public Collection getStaticFieldWrites(IField field) { Collection result = new ArrayList(); convertStmtsToMemoryAccess(invMod.get(heapModel.getPointerKeyForStaticField(field)), result); @@ -146,6 +152,7 @@ public class PABasedMemoryAccessMap implements MemoryAccessMap { } } + @Override public HeapModel getHeapModel() { return heapModel; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/PointerParamValueNumIterator.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/PointerParamValueNumIterator.java index 43d74a3c1..c7b392274 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/PointerParamValueNumIterator.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/PointerParamValueNumIterator.java @@ -92,6 +92,7 @@ public class PointerParamValueNumIterator implements Iterator { /* * @see java.util.Iterator#hasNext() */ + @Override public boolean hasNext() { return paramInd <= numParams; } @@ -99,6 +100,7 @@ public class PointerParamValueNumIterator implements Iterator { /* * @see java.util.Iterator#next() */ + @Override public Integer next() { if (!hasNext()) { throw new NoSuchElementException(); @@ -111,6 +113,7 @@ public class PointerParamValueNumIterator implements Iterator { /* * @see java.util.Iterator#remove() */ + @Override public void remove() throws UnsupportedOperationException { throw new UnsupportedOperationException(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/SimpleMemoryAccessMap.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/SimpleMemoryAccessMap.java index 239240c2c..4169e7da1 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/SimpleMemoryAccessMap.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/SimpleMemoryAccessMap.java @@ -343,6 +343,7 @@ public class SimpleMemoryAccessMap implements MemoryAccessMap { /* * @see com.ibm.wala.demandpa.util.MemoryAccessMap#getFieldReads(com.ibm.wala.classLoader.IField) */ + @Override public Collection getFieldReads(PointerKey pk, IField field) { Collection result = readMap.get(field); if (result == null) { @@ -355,6 +356,7 @@ public class SimpleMemoryAccessMap implements MemoryAccessMap { /* * @see com.ibm.wala.demandpa.util.MemoryAccessMap#getFieldWrites(com.ibm.wala.classLoader.IField) */ + @Override public Collection getFieldWrites(PointerKey pk, IField field) { Collection result = writeMap.get(field); if (result == null) { @@ -367,6 +369,7 @@ public class SimpleMemoryAccessMap implements MemoryAccessMap { /* * @see com.ibm.wala.demandpa.util.MemoryAccessMap#getArrayReads() */ + @Override public Collection getArrayReads(PointerKey pk) { return arrayReads; } @@ -374,6 +377,7 @@ public class SimpleMemoryAccessMap implements MemoryAccessMap { /* * @see com.ibm.wala.demandpa.util.MemoryAccessMap#getArrayWrites() */ + @Override public Collection getArrayWrites(PointerKey pk) { return arrayWrites; } @@ -422,14 +426,17 @@ public class SimpleMemoryAccessMap implements MemoryAccessMap { return result.toString(); } + @Override public Collection getStaticFieldReads(IField field) { return getFieldReads(null, field); } + @Override public Collection getStaticFieldWrites(IField field) { return getFieldWrites(null, field); } + @Override public HeapModel getHeapModel() { // NOTE: this memory access map actually makes no use of the heap model return heapModel; diff --git a/com.ibm.wala.core/src/com/ibm/wala/escape/FILiveObjectAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/escape/FILiveObjectAnalysis.java index 64e008714..836cffaad 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/escape/FILiveObjectAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/escape/FILiveObjectAnalysis.java @@ -75,6 +75,7 @@ public class FILiveObjectAnalysis implements ILiveObjectAnalysis { this.expensiveIntraproceduralAnalysis = expensiveIntraproceduralAnalysis; } + @Override public boolean mayBeLive(CGNode allocMethod, int allocPC, CGNode m, int instructionIndex) throws IllegalArgumentException, WalaException { if (allocMethod == null) { @@ -88,6 +89,7 @@ public class FILiveObjectAnalysis implements ILiveObjectAnalysis { /** * @param instructionIndex index of an SSA instruction */ + @Override public boolean mayBeLive(InstanceKey ik, CGNode m, int instructionIndex) { if (liveEverywhere.contains(ik)) { return true; @@ -186,6 +188,7 @@ public class FILiveObjectAnalysis implements ILiveObjectAnalysis { return DFS.getReachableNodes(callGraph, localRootNodes); } + @Override public boolean mayBeLive(InstanceKey ik, CGNode m, IntSet instructionIndices) { if (instructionIndices == null) { throw new IllegalArgumentException("instructionIndices is null"); diff --git a/com.ibm.wala.core/src/com/ibm/wala/escape/LocalLiveRangeAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/escape/LocalLiveRangeAnalysis.java index cbe434910..528da2427 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/escape/LocalLiveRangeAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/escape/LocalLiveRangeAnalysis.java @@ -58,6 +58,7 @@ public class LocalLiveRangeAnalysis { // a filter which accepts everything but the block which defs v Filter notDef = new Filter() { + @Override public boolean accepts(Object o) { return (defBlock == null || !defBlock.equals(o)); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/escape/TrivialMethodEscape.java b/com.ibm.wala.core/src/com/ibm/wala/escape/TrivialMethodEscape.java index 65b6a9484..878312be8 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/escape/TrivialMethodEscape.java +++ b/com.ibm.wala.core/src/com/ibm/wala/escape/TrivialMethodEscape.java @@ -56,6 +56,7 @@ public class TrivialMethodEscape implements IMethodEscapeAnalysis, INodeEscapeAn this.cg = cg; } + @Override public boolean mayEscape(MethodReference allocMethod, int allocPC, MethodReference m) throws WalaException { if (allocMethod == null) { @@ -75,6 +76,7 @@ public class TrivialMethodEscape implements IMethodEscapeAnalysis, INodeEscapeAn return mayEscape(allocN, allocPC, nodes); } + @Override public boolean mayEscape(CGNode allocNode, int allocPC, CGNode node) throws WalaException { return mayEscape(Collections.singleton(allocNode), allocPC, Collections.singleton(node)); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/AnalysisScope.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/AnalysisScope.java index c0e090594..7785b1062 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/AnalysisScope.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/AnalysisScope.java @@ -198,7 +198,7 @@ public class AnalysisScope { */ public void addSourceFileToScope(ClassLoaderReference loader, File file, String fileName) throws IllegalArgumentException { List s = MapUtil.findOrCreateList(moduleMap, loader); - s.add(new SourceFileModule(file, fileName)); + s.add(new SourceFileModule(file, fileName, null)); } /** @@ -207,7 +207,7 @@ public class AnalysisScope { */ public void addClassFileToScope(ClassLoaderReference loader, File file) throws IllegalArgumentException, InvalidClassFileException { List s = MapUtil.findOrCreateList(moduleMap, loader); - s.add(new ClassFileModule(file)); + s.add(new ClassFileModule(file, null)); } /** diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/DelegatingContext.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/DelegatingContext.java index 4baff8f3c..e42cbf50e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/DelegatingContext.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/DelegatingContext.java @@ -31,6 +31,7 @@ public class DelegatingContext implements Context { } } + @Override public ContextItem get(ContextKey name) { ContextItem result = A.get(name); if (result == null) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/CHACallGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/CHACallGraph.java index e2c1ef269..5fe066d76 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/CHACallGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/CHACallGraph.java @@ -61,21 +61,25 @@ public class CHACallGraph extends BasicCallGraph { super(method, C); } + @Override public IR getIR() { assert false; return null; } + @Override public DefUse getDU() { assert false; return null; } + @Override public Iterator iterateNewSites() { assert false; return null; } + @Override public Iterator iterateCallSites() { return getInterpreter(this).iterateCallSites(this); } @@ -116,6 +120,7 @@ public class CHACallGraph extends BasicCallGraph { isInitialized = true; } + @Override public IClassHierarchy getClassHierarchy() { return cha; } @@ -133,18 +138,21 @@ public class CHACallGraph extends BasicCallGraph { } } + @Override public Set getPossibleTargets(CGNode node, CallSiteReference site) { return Iterator2Collection.toSet( new MapIterator( new FilterIterator( getPossibleTargets(site), new Filter() { + @Override public boolean accepts(IMethod o) { return !o.isAbstract(); } } ), new Function() { + @Override public CGNode apply(IMethod object) { try { return findOrCreateNode(object, Everywhere.EVERYWHERE); @@ -156,14 +164,17 @@ public class CHACallGraph extends BasicCallGraph { })); } + @Override public int getNumberOfTargets(CGNode node, CallSiteReference site) { return IteratorUtil.count(getPossibleTargets(site)); } + @Override public Iterator getPossibleSites(final CGNode src, final CGNode target) { return new FilterIterator(getInterpreter(src).iterateCallSites(src), new Filter() { + @Override public boolean accepts(CallSiteReference o) { return getPossibleTargets(src, o).contains(target); } @@ -267,14 +278,17 @@ public class CHACallGraph extends BasicCallGraph { } } + @Override public Iterator getPredNodes(CGNode n) { return getPreds(n).iterator(); } + @Override public int getPredNodeCount(CGNode n) { return getPreds(n).size(); } + @Override public Iterator getSuccNodes(final CGNode n) { return new FilterIterator(new ComposedIterator(n.iterateCallSites()) { @Override @@ -284,6 +298,7 @@ public class CHACallGraph extends BasicCallGraph { }, new Filter() { private final MutableIntSet nodes = IntSetUtil.make(); + @Override public boolean accepts(CGNode o) { if (nodes.contains(o.getGraphNodeId())) { return false; @@ -295,34 +310,42 @@ public class CHACallGraph extends BasicCallGraph { }); } + @Override public int getSuccNodeCount(CGNode N) { return IteratorUtil.count(getSuccNodes(N)); } + @Override public void addEdge(CGNode src, CGNode dst) { assert false; } + @Override public void removeEdge(CGNode src, CGNode dst) throws UnsupportedOperationException { assert false; } + @Override public void removeAllIncidentEdges(CGNode node) throws UnsupportedOperationException { assert false; } + @Override public void removeIncomingEdges(CGNode node) throws UnsupportedOperationException { assert false; } + @Override public void removeOutgoingEdges(CGNode node) throws UnsupportedOperationException { assert false; } + @Override public boolean hasEdge(CGNode src, CGNode dst) { return getPossibleSites(src, dst).hasNext(); } + @Override public IntSet getSuccNodeNumbers(CGNode node) { MutableIntSet result = IntSetUtil.make(); for(Iterator ss = getSuccNodes(node); ss.hasNext(); ) { @@ -331,6 +354,7 @@ public class CHACallGraph extends BasicCallGraph { return result; } + @Override public IntSet getPredNodeNumbers(CGNode node) { MutableIntSet result = IntSetUtil.make(); for(Iterator ss = getPredNodes(node); ss.hasNext(); ) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/ContextInsensitiveCHAContextInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/ContextInsensitiveCHAContextInterpreter.java index fe2321fbd..e31818ba3 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/ContextInsensitiveCHAContextInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/ContextInsensitiveCHAContextInterpreter.java @@ -20,10 +20,12 @@ import com.ibm.wala.util.debug.Assertions; public class ContextInsensitiveCHAContextInterpreter implements CHAContextInterpreter { + @Override public boolean understands(CGNode node) { return true; } + @Override public Iterator iterateCallSites(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/AbstractRootMethod.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/AbstractRootMethod.java index d52ee64a7..08626f004 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/AbstractRootMethod.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/AbstractRootMethod.java @@ -341,6 +341,7 @@ public abstract class AbstractRootMethod extends SyntheticMethod { public RTAContextInterpreter getInterpreter() { return new RTAContextInterpreter() { + @Override public Iterator iterateNewSites(CGNode node) { ArrayList result = new ArrayList(); SSAInstruction[] statements = getStatements(options.getSSAOptions()); @@ -364,37 +365,45 @@ public abstract class AbstractRootMethod extends SyntheticMethod { return result.iterator(); } + @Override public Iterator iterateCallSites(CGNode node) { final Iterator I = getInvokeStatements(); return new Iterator() { + @Override public boolean hasNext() { return I.hasNext(); } + @Override public CallSiteReference next() { SSAInvokeInstruction s = (SSAInvokeInstruction) I.next(); return s.getCallSite(); } + @Override public void remove() { Assertions.UNREACHABLE(); } }; } + @Override public boolean understands(CGNode node) { return node.getMethod().getDeclaringClass().getReference().equals(FakeRootClass.FAKE_ROOT_CLASS); } + @Override public boolean recordFactoryType(CGNode node, IClass klass) { // not a factory type return false; } + @Override public Iterator iterateFieldsRead(CGNode node) { return EmptyIterator.instance(); } + @Override public Iterator iterateFieldsWritten(CGNode node) { return EmptyIterator.instance(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/BasicCallGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/BasicCallGraph.java index fadca3c22..cfdb6bd6a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/BasicCallGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/BasicCallGraph.java @@ -140,6 +140,7 @@ public abstract class BasicCallGraph extends AbstractNumberedGraph im return (NodeImpl) nodes.get(K); } + @Override public CGNode getFakeRootNode() { return fakeRoot; } @@ -158,6 +159,7 @@ public abstract class BasicCallGraph extends AbstractNumberedGraph im /** * Note: not all successors of the root node are entrypoints */ + @Override public Collection getEntrypointNodes() { return entrypointNodes; } @@ -186,6 +188,7 @@ public abstract class BasicCallGraph extends AbstractNumberedGraph im assert C != null; } + @Override public IMethod getMethod() { return method; } @@ -210,12 +213,15 @@ public abstract class BasicCallGraph extends AbstractNumberedGraph im return "Node: " + method.toString() + " Context: " + context.toString(); } + @Override public Context getContext() { return context; } + @Override public abstract boolean addTarget(CallSiteReference reference, CGNode target); + @Override public IClassHierarchy getClassHierarchy() { return method.getClassHierarchy(); } @@ -252,6 +258,7 @@ public abstract class BasicCallGraph extends AbstractNumberedGraph im /** * @return NodeImpl, or null if none found */ + @Override public CGNode getNode(IMethod method, Context C) { Key key = new Key(method, C); return getNode(key); @@ -288,6 +295,7 @@ public abstract class BasicCallGraph extends AbstractNumberedGraph im } + @Override public Set getNodes(MethodReference m) { IMethod im = getClassHierarchy().resolveMethod(m); if (im == null) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ClassHierarchyClassTargetSelector.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ClassHierarchyClassTargetSelector.java index 1628b87cd..031375a6b 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ClassHierarchyClassTargetSelector.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ClassHierarchyClassTargetSelector.java @@ -30,6 +30,7 @@ public class ClassHierarchyClassTargetSelector implements ClassTargetSelector { this.cha = cha; } + @Override public IClass getAllocatedTarget(CGNode caller, NewSiteReference site) { if (site == null) { throw new IllegalArgumentException("site is null"); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ClassHierarchyMethodTargetSelector.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ClassHierarchyMethodTargetSelector.java index 9bbb497f7..77f980aa4 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ClassHierarchyMethodTargetSelector.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ClassHierarchyMethodTargetSelector.java @@ -46,6 +46,7 @@ public class ClassHierarchyMethodTargetSelector implements MethodTargetSelector * * @throws IllegalArgumentException if call is null */ + @Override public IMethod getCalleeTarget(CGNode caller, CallSiteReference call, IClass receiver) { if (call == null) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ComposedEntrypoints.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ComposedEntrypoints.java index 51c52fb93..68882d2e5 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ComposedEntrypoints.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ComposedEntrypoints.java @@ -39,6 +39,7 @@ public class ComposedEntrypoints implements Iterable { } } + @Override public Iterator iterator() { return entrypoints.iterator(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ContextInsensitiveSelector.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ContextInsensitiveSelector.java index e0e9ebc46..2c0ce65de 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ContextInsensitiveSelector.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ContextInsensitiveSelector.java @@ -25,10 +25,12 @@ import com.ibm.wala.util.intset.IntSet; */ public class ContextInsensitiveSelector implements ContextSelector { + @Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { return Everywhere.EVERYWHERE; } + @Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { return EmptyIntSet.instance; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/DefaultContextSelector.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/DefaultContextSelector.java index ca321ea66..4ebecd88a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/DefaultContextSelector.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/DefaultContextSelector.java @@ -39,6 +39,7 @@ public class DefaultContextSelector implements ContextSelector { delegate = new DelegatingContextSelector(new CloneContextSelector(cha), s); } + @Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { if (caller == null) { throw new IllegalArgumentException("null caller"); @@ -46,6 +47,7 @@ public class DefaultContextSelector implements ContextSelector { return delegate.getCalleeTarget(caller, site, callee, receiver); } + @Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { return delegate.getRelevantParameters(caller, site); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/DelegatingContextSelector.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/DelegatingContextSelector.java index 0ba236096..342f2c5d0 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/DelegatingContextSelector.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/DelegatingContextSelector.java @@ -39,6 +39,7 @@ public class DelegatingContextSelector implements ContextSelector { } } + @Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { if (DEBUG) { System.err.println(("getCalleeTarget " + caller + " " + site + " " + callee)); @@ -59,6 +60,7 @@ public class DelegatingContextSelector implements ContextSelector { return C; } + @Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { return A.getRelevantParameters(caller, site).union(B.getRelevantParameters(caller, site)); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/Everywhere.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/Everywhere.java index ee67917f2..2a7080c3f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/Everywhere.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/Everywhere.java @@ -27,6 +27,7 @@ public class Everywhere implements Context { /** * This context gives no information. */ + @Override public ContextItem get(ContextKey name) { return null; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/FakeRootClass.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/FakeRootClass.java index aa1e82e76..4b2438734 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/FakeRootClass.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/FakeRootClass.java @@ -62,50 +62,62 @@ public class FakeRootClass extends SyntheticClass { } fakeRootStaticFields.put(name, new IField() { + @Override public IClassHierarchy getClassHierarchy() { return FakeRootClass.this.getClassHierarchy(); } + @Override public TypeReference getFieldTypeReference() { return fieldType; } + @Override public IClass getDeclaringClass() { return FakeRootClass.this; } + @Override public Atom getName() { return name; } + @Override public boolean isStatic() { return true; } + @Override public boolean isVolatile() { return false; } + @Override public FieldReference getReference() { return FieldReference.findOrCreate(FAKE_ROOT_CLASS, name, fieldType); } + @Override public boolean isFinal() { return false; } + @Override public boolean isPrivate() { return true; } + @Override public boolean isProtected() { return false; } + @Override public boolean isPublic() { return false; } + @Override public Collection getAnnotations() { return Collections.emptySet(); } @@ -115,6 +127,7 @@ public class FakeRootClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getModifiers() */ + @Override public int getModifiers() throws UnsupportedOperationException { throw new UnsupportedOperationException(); } @@ -122,6 +135,7 @@ public class FakeRootClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getSuperclass() */ + @Override public IClass getSuperclass() throws UnsupportedOperationException { return getClassHierarchy().getRootClass(); } @@ -129,6 +143,7 @@ public class FakeRootClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getAllImplementedInterfaces() */ + @Override public Collection getAllImplementedInterfaces() throws UnsupportedOperationException { return Collections.emptySet(); } @@ -143,6 +158,7 @@ public class FakeRootClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getMethod(com.ibm.wala.classLoader.Selector) */ + @Override public IMethod getMethod(Selector selector) throws UnsupportedOperationException { for (IMethod m : methods) { if (m.getSelector().equals(selector)) { @@ -155,6 +171,7 @@ public class FakeRootClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getMethod(com.ibm.wala.classLoader.Selector) */ + @Override public IField getField(Atom name) { if (fakeRootStaticFields != null) { return fakeRootStaticFields.get(name); @@ -166,6 +183,7 @@ public class FakeRootClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getClassInitializer() */ + @Override public IMethod getClassInitializer() throws UnimplementedError { Assertions.UNREACHABLE(); return null; @@ -174,6 +192,7 @@ public class FakeRootClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getDeclaredMethods() */ + @Override public Collection getDeclaredMethods() throws UnsupportedOperationException { return Collections.unmodifiableCollection(methods); } @@ -181,6 +200,7 @@ public class FakeRootClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getDeclaredInstanceFields() */ + @Override public Collection getDeclaredInstanceFields() throws UnsupportedOperationException { return Collections.emptySet(); } @@ -188,6 +208,7 @@ public class FakeRootClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getDeclaredStaticFields() */ + @Override public Collection getDeclaredStaticFields() { if (fakeRootStaticFields != null) { return fakeRootStaticFields.values(); @@ -199,6 +220,7 @@ public class FakeRootClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#isReferenceType() */ + @Override public boolean isReferenceType() { return getReference().isReferenceType(); } @@ -206,6 +228,7 @@ public class FakeRootClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getDirectInterfaces() */ + @Override public Collection getDirectInterfaces() throws UnsupportedOperationException { throw new UnsupportedOperationException(); } @@ -213,6 +236,7 @@ public class FakeRootClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getAllInstanceFields() */ + @Override public Collection getAllInstanceFields() { return Collections.emptySet(); } @@ -220,6 +244,7 @@ public class FakeRootClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getAllStaticFields() */ + @Override public Collection getAllStaticFields() { return getDeclaredStaticFields(); } @@ -227,6 +252,7 @@ public class FakeRootClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getAllMethods() */ + @Override public Collection getAllMethods() { throw new UnsupportedOperationException(); } @@ -234,14 +260,17 @@ public class FakeRootClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getAllFields() */ + @Override public Collection getAllFields() { return getDeclaredStaticFields(); } + @Override public boolean isPublic() { return false; } + @Override public boolean isPrivate() { return false; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java index 4895c03c2..8a5dac1d4 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java @@ -54,6 +54,7 @@ public class PartialCallGraph extends DelegatingGraph implements CallGra */ public static PartialCallGraph make(final CallGraph cg, final Collection partialRoots, final Collection nodes) { Graph partialGraph = GraphSlicer.prune(cg, new Filter() { + @Override public boolean accepts(CGNode o) { return nodes.contains(o); } @@ -70,6 +71,7 @@ public class PartialCallGraph extends DelegatingGraph implements CallGra public static PartialCallGraph make(CallGraph cg, Collection partialRoots) { final Set nodes = DFS.getReachableNodes(cg, partialRoots); Graph partialGraph = GraphSlicer.prune(cg, new Filter() { + @Override public boolean accepts(CGNode o) { return nodes.contains(o); } @@ -78,14 +80,17 @@ public class PartialCallGraph extends DelegatingGraph implements CallGra return new PartialCallGraph(cg, partialRoots, partialGraph); } + @Override public CGNode getFakeRootNode() throws UnsupportedOperationException { throw new UnsupportedOperationException(); } + @Override public Collection getEntrypointNodes() { return partialRoots; } + @Override public CGNode getNode(IMethod method, Context C) { CGNode x = cg.getNode(method, C); if (x == null) { @@ -94,6 +99,7 @@ public class PartialCallGraph extends DelegatingGraph implements CallGra return (containsNode(x) ? x : null); } + @Override public Set getNodes(MethodReference m) { Set result = HashSetFactory.make(); for (Iterator xs = cg.getNodes(m).iterator(); xs.hasNext();) { @@ -106,31 +112,38 @@ public class PartialCallGraph extends DelegatingGraph implements CallGra return result; } + @Override public IClassHierarchy getClassHierarchy() { return cg.getClassHierarchy(); } + @Override public Iterator iterateNodes(IntSet nodes) { return new FilterIterator(cg.iterateNodes(nodes), new Filter() { + @Override public boolean accepts(Object o) { return containsNode((CGNode) o); } }); } + @Override public int getMaxNumber() { return cg.getMaxNumber(); } + @Override public CGNode getNode(int index) { CGNode n = cg.getNode(index); return (containsNode(n) ? n : null); } + @Override public int getNumber(CGNode n) { return (containsNode(n) ? cg.getNumber(n) : -1); } + @Override public IntSet getSuccNodeNumbers(CGNode node) { assert containsNode(node); MutableIntSet x = IntSetUtil.make(); @@ -144,6 +157,7 @@ public class PartialCallGraph extends DelegatingGraph implements CallGra return x; } + @Override public IntSet getPredNodeNumbers(CGNode node) { assert containsNode(node); MutableIntSet x = IntSetUtil.make(); @@ -157,14 +171,17 @@ public class PartialCallGraph extends DelegatingGraph implements CallGra return x; } + @Override public int getNumberOfTargets(CGNode node, CallSiteReference site) { return (containsNode(node) ? getPossibleTargets(node, site).size() : -1); } + @Override public Iterator getPossibleSites(CGNode src, CGNode target) { return ((containsNode(src) && containsNode(target)) ? cg.getPossibleSites(src, target) : null); } + @Override public Set getPossibleTargets(CGNode node, CallSiteReference site) { if (!containsNode(node)) { return null; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/Util.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/Util.java index cc717bcef..aa7ff380d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/Util.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/Util.java @@ -133,6 +133,7 @@ public class Util { } } return new Iterable() { + @Override public Iterator iterator() { return result.iterator(); } @@ -183,19 +184,23 @@ public class Util { } return new Iterable() { + @Override public Iterator iterator() { final Atom mainMethod = Atom.findOrCreateAsciiAtom("main"); return new Iterator() { private int index = 0; + @Override public void remove() { Assertions.UNREACHABLE(); } + @Override public boolean hasNext() { return index < classNames.length; } + @Override public Entrypoint next() { TypeReference T = TypeReference.findOrCreate(loaderRef, TypeName.string2TypeName(classNames[index++])); MethodReference mainRef = MethodReference.findOrCreate(T, mainMethod, Descriptor diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AbstractFieldPointerKey.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AbstractFieldPointerKey.java index a0c609367..7103fc6d2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AbstractFieldPointerKey.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AbstractFieldPointerKey.java @@ -24,6 +24,7 @@ public abstract class AbstractFieldPointerKey extends AbstractPointerKey impleme this.instance = container; } + @Override public InstanceKey getInstanceKey() { return instance; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AbstractPointerAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AbstractPointerAnalysis.java index 00383947b..86751d018 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AbstractPointerAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AbstractPointerAnalysis.java @@ -43,6 +43,7 @@ public abstract class AbstractPointerAnalysis implements PointerAnalysis { this.instanceKeys = instanceKeys; } + @Override public HeapGraph getHeapGraph() { if (heapGraph == null) { heapGraph = new BasicHeapGraph(this, cg); @@ -54,10 +55,12 @@ public abstract class AbstractPointerAnalysis implements PointerAnalysis { return cg; } + @Override public Collection getInstanceKeys() { return Collections.unmodifiableCollection(instanceKeys.getObjects()); } + @Override public OrdinalSetMapping getInstanceKeyMapping() { return instanceKeys; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AbstractPointsToSolver.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AbstractPointsToSolver.java index 33d27dc7a..3f073467a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AbstractPointsToSolver.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AbstractPointsToSolver.java @@ -40,6 +40,7 @@ public abstract class AbstractPointsToSolver implements IPointsToSolver { /* * @see com.ibm.wala.ipa.callgraph.propagation.IPointsToSolver#solve() */ + @Override public abstract void solve(IProgressMonitor monitor) throws IllegalArgumentException, CancelException; protected PropagationCallGraphBuilder getBuilder() { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AbstractTypeInNode.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AbstractTypeInNode.java index 708287e02..c94e32261 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AbstractTypeInNode.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AbstractTypeInNode.java @@ -46,6 +46,7 @@ public abstract class AbstractTypeInNode implements InstanceKeyWithNode { /** * @return the concrete type allocated */ + @Override public IClass getConcreteType() { return type; } @@ -53,6 +54,7 @@ public abstract class AbstractTypeInNode implements InstanceKeyWithNode { /** * @return the call graph node which contains this allocation */ + @Override public CGNode getNode() { return node; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSite.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSite.java index d9e9a0f42..9cfdc5e51 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSite.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSite.java @@ -55,6 +55,7 @@ public class AllocationSite implements InstanceKey { return method; } + @Override public IClass getConcreteType() { return concreteType; } @@ -90,17 +91,20 @@ public class AllocationSite implements InstanceKey { return true; } + @Override public Iterator> getCreationSites(CallGraph CG) { return new MapIterator>( new FilterIterator( CG.getNodes(method.getReference()).iterator(), new Filter() { + @Override public boolean accepts(CGNode o) { return o.getMethod().equals(method); } } ), new Function>() { + @Override public Pair apply(CGNode object) { return Pair.make(object, site); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSiteInNode.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSiteInNode.java index d03bf247a..093904782 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSiteInNode.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSiteInNode.java @@ -48,6 +48,7 @@ public abstract class AllocationSiteInNode extends AbstractTypeInNode { return site; } + @Override public Iterator> getCreationSites(CallGraph CG) { return new NonNullSingletonIterator>(Pair.make(getNode(), getSite())); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSiteInNodeFactory.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSiteInNodeFactory.java index 58946c82f..f7b3bb207 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSiteInNodeFactory.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSiteInNodeFactory.java @@ -59,6 +59,7 @@ public class AllocationSiteInNodeFactory implements InstanceKeyFactory { this.classBased = new ClassBasedInstanceKeys(options, cha); } + @Override public InstanceKey getInstanceKeyForAllocation(CGNode node, NewSiteReference allocation) { IClass type = options.getClassTargetSelector().getAllocatedTarget(node, allocation); if (type == null) { @@ -94,6 +95,7 @@ public class AllocationSiteInNodeFactory implements InstanceKeyFactory { return key; } + @Override public InstanceKey getInstanceKeyForMultiNewArray(CGNode node, NewSiteReference allocation, int dim) { ArrayClass type = (ArrayClass) options.getClassTargetSelector().getAllocatedTarget(node, allocation); if (type == null) { @@ -104,6 +106,7 @@ public class AllocationSiteInNodeFactory implements InstanceKeyFactory { return key; } + @Override public InstanceKey getInstanceKeyForConstant(TypeReference type, T S) { if (options.getUseConstantSpecificKeys()) { return new ConstantKey(S, cha.lookupClass(type)); @@ -112,10 +115,12 @@ public class AllocationSiteInNodeFactory implements InstanceKeyFactory { } } + @Override public InstanceKey getInstanceKeyForPEI(CGNode node, ProgramCounter pei, TypeReference type) { return classBased.getInstanceKeyForPEI(node, pei, type); } + @Override public InstanceKey getInstanceKeyForClassObject(TypeReference type) { return classBased.getInstanceKeyForClassObject(type); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ArrayContentsKey.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ArrayContentsKey.java index b7a008054..bca3e385e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ArrayContentsKey.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ArrayContentsKey.java @@ -43,6 +43,7 @@ public final class ArrayContentsKey extends AbstractFieldPointerKey implements F /* * @see com.ibm.wala.ipa.callgraph.propagation.PointerKey#getTypeFilter() */ + @Override public TypeFilter getTypeFilter() { return new SingleClassFilter(((ArrayClass) instance.getConcreteType()).getElementClass()); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AssignOperator.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AssignOperator.java index 1abe64319..2def3ae28 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AssignOperator.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AssignOperator.java @@ -63,6 +63,7 @@ class AssignOperator extends UnaryOperator implements IPoin /* * @see com.ibm.wala.ipa.callgraph.propagation.IPointerOperator#isComplex() */ + @Override public boolean isComplex() { return false; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ClassBasedInstanceKeys.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ClassBasedInstanceKeys.java index 5df7c76c6..7bdb5cf06 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ClassBasedInstanceKeys.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ClassBasedInstanceKeys.java @@ -40,6 +40,7 @@ public class ClassBasedInstanceKeys implements InstanceKeyFactory { this.options = options; } + @Override public InstanceKey getInstanceKeyForAllocation(CGNode node, NewSiteReference allocation) { if (allocation == null) { throw new IllegalArgumentException("allocation is null"); @@ -64,6 +65,7 @@ public class ClassBasedInstanceKeys implements InstanceKeyFactory { * [[Object; e.g., the [[Object; instances in [[[Object; dim == 1 represents the second dimension, e.g., the [Object * instances in [[[Object; */ + @Override public InstanceKey getInstanceKeyForMultiNewArray(CGNode node, NewSiteReference allocation, int dim) { if (DEBUG) { System.err.println(("getInstanceKeyForMultiNewArray " + allocation + " " + dim)); @@ -98,6 +100,7 @@ public class ClassBasedInstanceKeys implements InstanceKeyFactory { return key; } + @Override public InstanceKey getInstanceKeyForConstant(TypeReference type, T S) { if (type == null || cha.lookupClass(type) == null) { return null; @@ -113,6 +116,7 @@ public class ClassBasedInstanceKeys implements InstanceKeyFactory { /** * @return a set of ConcreteTypeKeys that represent the exceptions the PEI may throw. */ + @Override public InstanceKey getInstanceKeyForPEI(CGNode node, ProgramCounter peiLoc, TypeReference type) { IClass klass = cha.lookupClass(type); if (klass == null) { @@ -121,6 +125,7 @@ public class ClassBasedInstanceKeys implements InstanceKeyFactory { return new ConcreteTypeKey(cha.lookupClass(type)); } + @Override public InstanceKey getInstanceKeyForClassObject(TypeReference type) { IClass klass = cha.lookupClass(type); if (klass == null) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/CloneContextSelector.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/CloneContextSelector.java index 55e5709a0..fbf77931f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/CloneContextSelector.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/CloneContextSelector.java @@ -35,6 +35,7 @@ public class CloneContextSelector implements ContextSelector { this.cha = cha; } + @Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { if (receiver == null) { return null; @@ -46,6 +47,7 @@ public class CloneContextSelector implements ContextSelector { } } + @Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { IMethod declaredTarget = cha.resolveMethod(site.getDeclaredTarget()); if (declaredTarget != null && declaredTarget.getReference().equals(CloneInterpreter.CLONE)) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConcreteTypeKey.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConcreteTypeKey.java index f55e77299..9cfaff4f8 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConcreteTypeKey.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConcreteTypeKey.java @@ -72,6 +72,7 @@ public final class ConcreteTypeKey implements InstanceKey { /* * @see com.ibm.wala.ipa.callgraph.propagation.InstanceKey#getConcreteType() */ + @Override public IClass getConcreteType() { return type; } @@ -102,6 +103,7 @@ public final class ConcreteTypeKey implements InstanceKey { return result; } + @Override public Iterator> getCreationSites(CallGraph CG) { return new ComposedIterator>(CG.iterator()) { @Override @@ -110,12 +112,14 @@ public final class ConcreteTypeKey implements InstanceKey { new FilterIterator( outer.iterateNewSites(), new Filter() { + @Override public boolean accepts(NewSiteReference o) { return o.getDeclaredType().equals(type.getReference()); } } ), new Function>() { + @Override public Pair apply(NewSiteReference object) { return Pair.make(outer, object); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConstantKey.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConstantKey.java index 53e46eca9..17226c3c0 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConstantKey.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConstantKey.java @@ -58,6 +58,7 @@ public final class ConstantKey implements InstanceKey { /* * @see com.ibm.wala.ipa.callgraph.propagation.InstanceKey#getConcreteType() */ + @Override public IClass getConcreteType() { return valueClass; } @@ -66,6 +67,7 @@ public final class ConstantKey implements InstanceKey { return value; } + @Override public Iterator> getCreationSites(CallGraph CG) { return EmptyIterator.instance(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/FilteredPointerKey.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/FilteredPointerKey.java index f9b0ac47d..ef512862a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/FilteredPointerKey.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/FilteredPointerKey.java @@ -59,11 +59,13 @@ public interface FilteredPointerKey extends PointerKey { return (o instanceof SingleClassFilter) && ((SingleClassFilter) o).getConcreteType().equals(concreteType); } + @Override public boolean addFiltered(PropagationSystem system, PointsToSetVariable L, PointsToSetVariable R) { IntSet f = system.getInstanceKeysForClass(concreteType); return (f == null) ? false : L.addAllInIntersection(R, f); } + @Override public boolean addInverseFiltered(PropagationSystem system, PointsToSetVariable L, PointsToSetVariable R) { IntSet f = system.getInstanceKeysForClass(concreteType); @@ -73,6 +75,7 @@ public interface FilteredPointerKey extends PointerKey { return (f == null) ? L.addAll(R) : L.addAll(IntSetUtil.diff(R.getValue(), f)); } + @Override public boolean isRootFilter() { return concreteType.equals(concreteType.getClassHierarchy().getRootClass()); } @@ -132,11 +135,13 @@ public interface FilteredPointerKey extends PointerKey { return f; } + @Override public boolean addFiltered(PropagationSystem system, PointsToSetVariable L, PointsToSetVariable R) { IntSet f = bits(system); return (f == null) ? false : L.addAllInIntersection(R, f); } + @Override public boolean addInverseFiltered(PropagationSystem system, PointsToSetVariable L, PointsToSetVariable R) { IntSet f = bits(system); @@ -146,6 +151,7 @@ public interface FilteredPointerKey extends PointerKey { return (f == null) ? L.addAll(R) : L.addAll(IntSetUtil.diff(R.getValue(), f)); } + @Override public boolean isRootFilter() { return concreteType.length == 1 && concreteType[0].getClassHierarchy().getRootClass().equals(concreteType[0]); } @@ -177,6 +183,7 @@ public interface FilteredPointerKey extends PointerKey { return (o instanceof SingleInstanceFilter) && ((SingleInstanceFilter) o).getInstance().equals(concreteType); } + @Override public boolean addFiltered(PropagationSystem system, PointsToSetVariable L, PointsToSetVariable R) { int idx = system.findOrCreateIndexForInstanceKey(concreteType); if (R.contains(idx)) { @@ -189,6 +196,7 @@ public interface FilteredPointerKey extends PointerKey { return false; } + @Override public boolean addInverseFiltered(PropagationSystem system, PointsToSetVariable L, PointsToSetVariable R) { int idx = system.findOrCreateIndexForInstanceKey(concreteType); if (!R.contains(idx) || L.contains(idx)) { @@ -200,6 +208,7 @@ public interface FilteredPointerKey extends PointerKey { } } + @Override public boolean isRootFilter() { return false; } @@ -246,6 +255,7 @@ public interface FilteredPointerKey extends PointerKey { this.system = system; } + @Override public void act(int i) { InstanceKey I = system.getInstanceKey(i); IClass C = I.getConcreteType(); @@ -258,6 +268,7 @@ public interface FilteredPointerKey extends PointerKey { } } + @Override public boolean addFiltered(PropagationSystem system, PointsToSetVariable L, PointsToSetVariable R) { if (R.getValue() == null) { return false; @@ -268,6 +279,7 @@ public interface FilteredPointerKey extends PointerKey { } } + @Override public boolean addInverseFiltered(PropagationSystem system, PointsToSetVariable L, PointsToSetVariable R) { if (R.getValue() == null) { return false; @@ -278,6 +290,7 @@ public interface FilteredPointerKey extends PointerKey { } } + @Override public boolean isRootFilter() { return false; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/InstanceFieldKeyWithFilter.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/InstanceFieldKeyWithFilter.java index 62d1e18f1..672c4a93b 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/InstanceFieldKeyWithFilter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/InstanceFieldKeyWithFilter.java @@ -43,6 +43,7 @@ public class InstanceFieldKeyWithFilter extends InstanceFieldKey implements Filt /* * @see com.ibm.wala.ipa.callgraph.propagation.PointerKey#getTypeFilter() */ + @Override public TypeFilter getTypeFilter() { return new SingleClassFilter(filter); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/LocalPointerKeyWithFilter.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/LocalPointerKeyWithFilter.java index d0f66ac48..a2f52b298 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/LocalPointerKeyWithFilter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/LocalPointerKeyWithFilter.java @@ -26,6 +26,7 @@ public class LocalPointerKeyWithFilter extends LocalPointerKey implements Filter } + @Override public TypeFilter getTypeFilter() { return typeFilter; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerAnalysisImpl.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerAnalysisImpl.java index 1bf0a6a4b..5243eee3f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerAnalysisImpl.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerAnalysisImpl.java @@ -107,6 +107,7 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { /* * @see com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis#getPointsToSet(com.ibm.wala.ipa.callgraph.propagation.PointerKey) */ + @Override @SuppressWarnings("unchecked") public OrdinalSet getPointsToSet(PointerKey key) { if (pointsToMap.isImplicit(key)) { @@ -141,6 +142,7 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { /** * did the pointer analysis use a type filter for a given points-to set? (this is ugly). */ + @Override public boolean isFiltered(PointerKey key) { if (pointsToMap.isImplicit(key)) { return false; @@ -447,32 +449,39 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { /* * @see com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis#getHeapModel() */ + @Override public HeapModel getHeapModel() { return H; } private class HModel implements HeapModel { + @Override public Iterator iteratePointerKeys() { return pointsToMap.iterateKeys(); } + @Override public InstanceKey getInstanceKeyForAllocation(CGNode node, NewSiteReference allocation) { return iKeyFactory.getInstanceKeyForAllocation(node, allocation); } + @Override public InstanceKey getInstanceKeyForMultiNewArray(CGNode node, NewSiteReference allocation, int dim) { return iKeyFactory.getInstanceKeyForMultiNewArray(node, allocation, dim); } + @Override public InstanceKey getInstanceKeyForConstant(TypeReference type, T S) { return iKeyFactory.getInstanceKeyForConstant(type, S); } + @Override public InstanceKey getInstanceKeyForPEI(CGNode node, ProgramCounter peiLoc, TypeReference type) { return iKeyFactory.getInstanceKeyForPEI(node, peiLoc, type); } + @Override public InstanceKey getInstanceKeyForClassObject(TypeReference type) { return iKeyFactory.getInstanceKeyForClassObject(type); } @@ -480,10 +489,12 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { /* * @see com.ibm.wala.ipa.callgraph.propagation.PointerKeyFactory#getPointerKeyForLocal(com.ibm.detox.ipa.callgraph.CGNode, int) */ + @Override public PointerKey getPointerKeyForLocal(CGNode node, int valueNumber) { return pointerKeys.getPointerKeyForLocal(node, valueNumber); } + @Override public FilteredPointerKey getFilteredPointerKeyForLocal(CGNode node, int valueNumber, FilteredPointerKey.TypeFilter filter) { return pointerKeys.getFilteredPointerKeyForLocal(node, valueNumber, filter); } @@ -491,6 +502,7 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { /* * @see com.ibm.wala.ipa.callgraph.propagation.PointerKeyFactory#getPointerKeyForReturnValue(com.ibm.detox.ipa.callgraph.CGNode) */ + @Override public PointerKey getPointerKeyForReturnValue(CGNode node) { return pointerKeys.getPointerKeyForReturnValue(node); } @@ -500,6 +512,7 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { * com.ibm.wala.ipa.callgraph.propagation.PointerKeyFactory#getPointerKeyForExceptionalReturnValue(com.ibm.detox.ipa.callgraph * .CGNode) */ + @Override public PointerKey getPointerKeyForExceptionalReturnValue(CGNode node) { return pointerKeys.getPointerKeyForExceptionalReturnValue(node); } @@ -508,6 +521,7 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { * @see * com.ibm.wala.ipa.callgraph.propagation.PointerKeyFactory#getPointerKeyForStaticField(com.ibm.wala.classLoader.FieldReference) */ + @Override public PointerKey getPointerKeyForStaticField(IField f) { return pointerKeys.getPointerKeyForStaticField(f); } @@ -517,6 +531,7 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { * com.ibm.wala.ipa.callgraph.propagation.PointerKeyFactory#getPointerKeyForInstance(com.ibm.wala.ipa.callgraph.propagation. * InstanceKey, com.ibm.wala.classLoader.FieldReference) */ + @Override public PointerKey getPointerKeyForInstanceField(InstanceKey I, IField field) { assert field != null; return pointerKeys.getPointerKeyForInstanceField(I, field); @@ -527,10 +542,12 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { * com.ibm.wala.ipa.callgraph.propagation.PointerKeyFactory#getPointerKeyForArrayContents(com.ibm.wala.ipa.callgraph.propagation * .InstanceKey) */ + @Override public PointerKey getPointerKeyForArrayContents(InstanceKey I) { return pointerKeys.getPointerKeyForArrayContents(I); } + @Override public IClassHierarchy getClassHierarchy() { return getCallGraph().getClassHierarchy(); } @@ -539,10 +556,12 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { /* * @see com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis#iteratePointerKeys() */ + @Override public Iterable getPointerKeys() { return Iterator2Iterable.make(pointsToMap.iterateKeys()); } + @Override public IClassHierarchy getClassHierarchy() { return builder.getClassHierarchy(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerKeyComparator.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerKeyComparator.java index 0ae185f0a..7ce61bc0c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerKeyComparator.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerKeyComparator.java @@ -180,6 +180,7 @@ public class PointerKeyComparator implements Comparator { return -1; } + @Override public int compare(Object key1, Object key2) { if (key1 == key2) return 0; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java index cc4b03dca..7ae2de21c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java @@ -202,6 +202,7 @@ public class PointsToMap { */ public Iterator getTransitiveRoots() { return new FilterIterator(iterateKeys(), new Filter() { + @Override public boolean accepts(Object o) { return isTransitiveRoot((PointerKey) o); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToSetVariable.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToSetVariable.java index f016a093d..3f690bb81 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToSetVariable.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToSetVariable.java @@ -122,6 +122,7 @@ public class PointsToSetVariable extends IntSetVariable { } b.foreach(new IntSetAction() { + @Override public void act(int x) { InstanceKey ik = instanceKeys.getMappedObject(x); IClass concreteType = ik.getConcreteType(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationCallGraphBuilder.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationCallGraphBuilder.java index 372c3a108..13c3abf28 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationCallGraphBuilder.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationCallGraphBuilder.java @@ -216,6 +216,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder { /* * @see com.ibm.wala.ipa.callgraph.CallGraphBuilder#makeCallGraph(com.ibm.wala.ipa.callgraph.AnalysisOptions) */ + @Override public CallGraph makeCallGraph(AnalysisOptions options, IProgressMonitor monitor) throws IllegalArgumentException, CallGraphBuilderCancelException { if (options == null) { @@ -507,6 +508,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder { /* * @see com.ibm.wala.ipa.callgraph.propagation.FilteredPointerKey#getTypeFilter() */ + @Override public TypeFilter getTypeFilter() { return new SingleClassFilter(type); } @@ -622,6 +624,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder { /* * @see com.ibm.wala.ipa.callgraph.propagation.IPointerOperator#isComplex() */ + @Override public boolean isComplex() { return false; } @@ -671,6 +674,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder { /* * @see com.ibm.detox.ipa.callgraph.CallGraphBuilder#getPointerAnalysis() */ + @Override public PointerAnalysis getPointerAnalysis() { return system.extractPointerAnalysis(this); } @@ -821,6 +825,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder { final MutableBoolean sideEffect = new MutableBoolean(); IntSetAction action = new IntSetAction() { + @Override public void act(int i) { InstanceKey I = system.getInstanceKey(i); if (!I.getConcreteType().isArrayClass()) { @@ -869,6 +874,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder { /* * @see com.ibm.wala.ipa.callgraph.propagation.IPointerOperator#isComplex() */ + @Override public boolean isComplex() { return true; } @@ -944,6 +950,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder { return 9859 + super.hashCode(); } + @Override public boolean isComplex() { return true; } @@ -1003,6 +1010,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder { } final MutableBoolean sideEffect = new MutableBoolean(); IntSetAction action = new IntSetAction() { + @Override public void act(int i) { InstanceKey I = system.getInstanceKey(i); if (!representsNullType(I)) { @@ -1062,6 +1070,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder { /* * @see com.ibm.wala.ipa.callgraph.propagation.IPointerOperator#isComplex() */ + @Override public boolean isComplex() { return true; } @@ -1089,6 +1098,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder { /* * @see com.ibm.wala.ipa.callgraph.propagation.IPointerOperator#isComplex() */ + @Override public boolean isComplex() { return true; } @@ -1116,6 +1126,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder { } final MutableBoolean sideEffect = new MutableBoolean(); IntSetAction action = new IntSetAction() { + @Override public void act(int i) { InstanceKey I = system.getInstanceKey(i); if (!representsNullType(I)) { @@ -1218,6 +1229,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder { IntSet value = ref.getValue(); final MutableBoolean sideEffect = new MutableBoolean(); IntSetAction action = new IntSetAction() { + @Override public void act(int i) { InstanceKey I = system.getInstanceKey(i); if (!representsNullType(I)) { @@ -1256,6 +1268,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder { /* * @see com.ibm.wala.ipa.callgraph.propagation.IPointerOperator#isComplex() */ + @Override public boolean isComplex() { return true; } @@ -1290,6 +1303,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder { IntSet value = arrayref.getValue(); final MutableBoolean sideEffect = new MutableBoolean(); IntSetAction action = new IntSetAction() { + @Override public void act(int i) { InstanceKey I = system.getInstanceKey(i); if (!I.getConcreteType().isArrayClass()) { @@ -1346,6 +1360,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder { /* * @see com.ibm.wala.ipa.callgraph.propagation.IPointerOperator#isComplex() */ + @Override public boolean isComplex() { return true; } @@ -1455,6 +1470,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder { boolean b = false; } + @Override public AnalysisCache getAnalysisCache() { return analysisCache; }; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java index 95032499f..73e8bb919 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java @@ -273,9 +273,11 @@ public class PropagationGraph implements IFixedPointSystem implicitUnaryCount--; } + @Override @SuppressWarnings("unchecked") public Iterator getStatements() { Iterator it = new FilterIterator(delegateGraph.iterator(), new Filter() { + @Override public boolean accepts(Object x) { return x instanceof AbstractStatement; } @@ -300,10 +302,12 @@ public class PropagationGraph implements IFixedPointSystem this.defs = defs.intIterator(); } + @Override public boolean hasNext() { return defs.hasNext(); } + @Override public AbstractStatement next() { int l = defs.next(); PointsToSetVariable lhs = (PointsToSetVariable) delegateGraph.getNode(l); @@ -315,6 +319,7 @@ public class PropagationGraph implements IFixedPointSystem return temp; } + @Override public void remove() { // TODO Auto-generated method stub Assertions.UNREACHABLE(); @@ -338,10 +343,12 @@ public class PropagationGraph implements IFixedPointSystem this.uses = uses.intIterator(); } + @Override public boolean hasNext() { return uses.hasNext(); } + @Override public AbstractStatement next() { int r = uses.next(); PointsToSetVariable rhs = (PointsToSetVariable) delegateGraph.getNode(r); @@ -352,6 +359,7 @@ public class PropagationGraph implements IFixedPointSystem return temp; } + @Override public void remove() { // TODO Auto-generated method stub Assertions.UNREACHABLE(); @@ -389,10 +397,12 @@ public class PropagationGraph implements IFixedPointSystem } } + @Override public boolean hasNext() { return innerDelegate != null; } + @Override public AbstractStatement next() { IntPair p = (IntPair) innerDelegate.next(); int lhs = p.getX(); @@ -405,6 +415,7 @@ public class PropagationGraph implements IFixedPointSystem return result; } + @Override public void remove() { // TODO Auto-generated method stub Assertions.UNREACHABLE(); @@ -412,6 +423,7 @@ public class PropagationGraph implements IFixedPointSystem } } + @Override public void removeStatement(IFixedPointStatement eq) throws IllegalArgumentException { if (eq == null) { throw new IllegalArgumentException("eq == null"); @@ -424,6 +436,7 @@ public class PropagationGraph implements IFixedPointSystem } } + @Override public void reorder() { VariableGraphView graph = new VariableGraphView(); @@ -507,10 +520,12 @@ public class PropagationGraph implements IFixedPointSystem return new Iterator() { Iterator inner; + @Override public boolean hasNext() { return eqs.hasNext() || (inner != null); } + @Override public PointsToSetVariable next() { if (inner != null) { PointsToSetVariable result = (PointsToSetVariable)inner.next(); @@ -529,6 +544,7 @@ public class PropagationGraph implements IFixedPointSystem } } + @Override public void remove() { // TODO Auto-generated method stub Assertions.UNREACHABLE(); @@ -566,10 +582,12 @@ public class PropagationGraph implements IFixedPointSystem advance(); } + @Override public boolean hasNext() { return nextResult != null; } + @Override public PointsToSetVariable next() { PointsToSetVariable result = nextResult; advance(); @@ -584,6 +602,7 @@ public class PropagationGraph implements IFixedPointSystem } } + @Override public void remove() { // TODO Auto-generated method stub Assertions.UNREACHABLE(); @@ -645,6 +664,7 @@ public class PropagationGraph implements IFixedPointSystem } + @Override @SuppressWarnings("unchecked") public Iterator getStatementsThatUse(PointsToSetVariable v) { if (v == null) { @@ -670,6 +690,7 @@ public class PropagationGraph implements IFixedPointSystem return list.iterator(); } + @Override @SuppressWarnings("unchecked") public Iterator getStatementsThatDef(PointsToSetVariable v) { if (v == null) { @@ -703,6 +724,7 @@ public class PropagationGraph implements IFixedPointSystem * @throws IllegalArgumentException if v is null * */ + @Override public int getNumberOfStatementsThatUse(PointsToSetVariable v) { if (v == null) { throw new IllegalArgumentException("v is null"); @@ -723,6 +745,7 @@ public class PropagationGraph implements IFixedPointSystem return result; } + @Override public int getNumberOfStatementsThatDef(PointsToSetVariable v) { if (v == null) { throw new IllegalArgumentException("v is null"); @@ -743,9 +766,11 @@ public class PropagationGraph implements IFixedPointSystem return result; } + @Override @SuppressWarnings("unchecked") public Iterator getVariables() { Iterator it = new FilterIterator(delegateGraph.iterator(), new Filter() { + @Override public boolean accepts(Object x) { return x instanceof IVariable; } @@ -778,6 +803,7 @@ public class PropagationGraph implements IFixedPointSystem } } + @Override public boolean containsStatement(IFixedPointStatement eq) throws IllegalArgumentException { if (eq == null) { throw new IllegalArgumentException("eq == null"); @@ -811,10 +837,12 @@ public class PropagationGraph implements IFixedPointSystem } } + @Override public boolean containsVariable(PointsToSetVariable v) { return delegateGraph.containsNode(v); } + @Override public void addStatement(IFixedPointStatement statement) throws IllegalArgumentException, UnimplementedError { if (statement == null) { throw new IllegalArgumentException("statement == null"); @@ -936,10 +964,12 @@ public class PropagationGraph implements IFixedPointSystem advance(); } + @Override public boolean hasNext() { return nextResult != null; } + @Override public PointsToSetVariable next() { PointsToSetVariable result = nextResult; advance(); @@ -956,6 +986,7 @@ public class PropagationGraph implements IFixedPointSystem } } + @Override public void remove() { Assertions.UNREACHABLE(); } @@ -989,10 +1020,12 @@ public class PropagationGraph implements IFixedPointSystem advance(); } + @Override public boolean hasNext() { return nextResult != null; } + @Override public PointsToSetVariable next() { PointsToSetVariable result = nextResult; advance(); @@ -1009,6 +1042,7 @@ public class PropagationGraph implements IFixedPointSystem } } + @Override public void remove() { // TODO Auto-generated method stub Assertions.UNREACHABLE(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java index 80bb74d37..e46c52f38 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java @@ -646,6 +646,7 @@ public class PropagationSystem extends DefaultFixedPointSolver pks = new ArrayList(params.size()); params.foreach(new IntSetAction() { + @Override public void act(int x) { if (!contentsAreInvariant(symbolTable, du, instruction.getUse(x))) { pks.add(getBuilder().getPointerKeyForLocal(node, instruction.getUse(x))); @@ -1357,6 +1359,7 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap * @return if non-null, then result[i] holds the set of instance keys which may be passed as the ith parameter. (which must be * invariant) */ + @Override public InstanceKey[][] computeInvariantParameters(SSAAbstractInvokeInstruction call) { InstanceKey[][] constParams = null; for (int i = 0; i < call.getNumberOfUses(); i++) { @@ -1810,6 +1813,7 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap /* * @see com.ibm.wala.ipa.callgraph.propagation.IPointerOperator#isComplex() */ + @Override public boolean isComplex() { return true; } @@ -1846,6 +1850,7 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap IntSet s = system.findOrCreatePointsToSet(var).getValue(); if (s != null && !s.isEmpty()) { s.foreach(new IntSetAction() { + @Override public void act(int x) { keys[p] = system.getInstanceKey(x); rec(pi + 1); @@ -1878,6 +1883,7 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap } final Set targets = HashSetFactory.make(); VoidFunction f = new VoidFunction() { + @Override public void apply(InstanceKey[] v) { IClass recv = null; if (site.isDispatch()) { @@ -2243,6 +2249,7 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap /* * @see com.ibm.wala.ipa.callgraph.propagation.HeapModel#iteratePointerKeys() */ + @Override public Iterator iteratePointerKeys() { return system.iteratePointerKeys(); } @@ -2266,6 +2273,7 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap return types; } + @Override public InstanceKey getInstanceKeyForPEI(CGNode node, ProgramCounter instr, TypeReference type) { return getInstanceKeyForPEI(node, instr, type, instanceKeyFactory); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SmushedAllocationSiteInNode.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SmushedAllocationSiteInNode.java index 83c6d5ec8..f8bca489b 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SmushedAllocationSiteInNode.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SmushedAllocationSiteInNode.java @@ -54,16 +54,19 @@ public class SmushedAllocationSiteInNode extends AbstractTypeInNode { return "SMUSHED " + getNode() + " : " + getConcreteType(); } + @Override public Iterator> getCreationSites(CallGraph CG) { return new MapIterator>( new FilterIterator( getNode().iterateNewSites(), new Filter() { + @Override public boolean accepts(NewSiteReference o) { return o.getDeclaredType().equals(getConcreteType().getReference()); } }), new Function>() { + @Override public Pair apply(NewSiteReference object) { return Pair.make(getNode(), object); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SmushedAllocationSiteInstanceKeys.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SmushedAllocationSiteInstanceKeys.java index ad9bc9751..99df2b486 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SmushedAllocationSiteInstanceKeys.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SmushedAllocationSiteInstanceKeys.java @@ -48,6 +48,7 @@ public class SmushedAllocationSiteInstanceKeys implements InstanceKeyFactory { this.classBased = new ClassBasedInstanceKeys(options, cha); } + @Override public InstanceKey getInstanceKeyForAllocation(CGNode node, NewSiteReference allocation) { IClass type = options.getClassTargetSelector().getAllocatedTarget(node, allocation); if (type == null) { @@ -68,6 +69,7 @@ public class SmushedAllocationSiteInstanceKeys implements InstanceKeyFactory { return key; } + @Override public InstanceKey getInstanceKeyForMultiNewArray(CGNode node, NewSiteReference allocation, int dim) { ArrayClass type = (ArrayClass) options.getClassTargetSelector().getAllocatedTarget(node, allocation); if (type == null) { @@ -78,6 +80,7 @@ public class SmushedAllocationSiteInstanceKeys implements InstanceKeyFactory { return key; } + @Override public InstanceKey getInstanceKeyForConstant(TypeReference type, T S) { if (options.getUseConstantSpecificKeys()) return new ConstantKey(S, cha.lookupClass(type)); @@ -85,10 +88,12 @@ public class SmushedAllocationSiteInstanceKeys implements InstanceKeyFactory { return new ConcreteTypeKey(cha.lookupClass(type)); } + @Override public InstanceKey getInstanceKeyForPEI(CGNode node, ProgramCounter pei, TypeReference type) { return classBased.getInstanceKeyForPEI(node, pei, type); } + @Override public InstanceKey getInstanceKeyForClassObject(TypeReference type) { return classBased.getInstanceKeyForClassObject(type); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/StringConstantCharArray.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/StringConstantCharArray.java index c153b792d..0c0ca06b2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/StringConstantCharArray.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/StringConstantCharArray.java @@ -64,6 +64,7 @@ public class StringConstantCharArray implements InstanceKey { return true; } + @Override public IClass getConcreteType() { return constant.getConcreteType().getClassHierarchy().lookupClass(TypeReference.CharArray); } @@ -73,6 +74,7 @@ public class StringConstantCharArray implements InstanceKey { return "StringConstantCharArray:" + constant; } + @Override public Iterator> getCreationSites(CallGraph CG) { return EmptyIterator.instance(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/TargetMethodContextSelector.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/TargetMethodContextSelector.java index 2a0e7c472..fcfe60ed2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/TargetMethodContextSelector.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/TargetMethodContextSelector.java @@ -34,6 +34,7 @@ public class TargetMethodContextSelector implements ContextSelector { this.selector = selector; } + @Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] R) { if (R == null || R[0] == null) { throw new IllegalArgumentException("R is null"); @@ -47,6 +48,7 @@ public class TargetMethodContextSelector implements ContextSelector { return M; } + @Override public ContextItem get(ContextKey name) { if (name.equals(ContextKey.PARAMETERS[0])) { return new FilteredPointerKey.TargetMethodFilter(M); @@ -77,6 +79,7 @@ public class TargetMethodContextSelector implements ContextSelector { private static final IntSet thisParameter = IntSetUtil.make(new int[]{0}); + @Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { return thisParameter; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallStringContext.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallStringContext.java index 1e41e38f8..c3e64ea62 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallStringContext.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallStringContext.java @@ -39,6 +39,7 @@ public class CallStringContext implements Context { return "CallStringContext: " + cs.toString(); } + @Override public ContextItem get(ContextKey name) { if (CallStringContextSelector.CALL_STRING.equals(name)) { return cs; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallStringContextSelector.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallStringContextSelector.java index e776d2b98..c32da64f2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallStringContextSelector.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallStringContextSelector.java @@ -56,6 +56,7 @@ public abstract class CallStringContextSelector implements ContextSelector { return cs.hashCode() * base.hashCode(); } + @Override public ContextItem get(ContextKey name) { if (CALL_STRING.equals(name)) { return cs; @@ -97,6 +98,7 @@ public abstract class CallStringContextSelector implements ContextSelector { /* * @see com.ibm.wala.ipa.callgraph.ContextSelector#getCalleeTarget(com.ibm.wala.ipa.callgraph.CGNode, com.ibm.wala.classLoader.CallSiteReference, com.ibm.wala.classLoader.IMethod, com.ibm.wala.ipa.callgraph.propagation.InstanceKey) */ + @Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { Context baseContext = base.getCalleeTarget(caller, site, callee, receiver); CallString cs = getCallString(caller, site, callee); @@ -109,6 +111,7 @@ public abstract class CallStringContextSelector implements ContextSelector { } } + @Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { return base.getRelevantParameters(caller, site); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallerContext.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallerContext.java index c6e928d5b..91fba9bfb 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallerContext.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallerContext.java @@ -32,6 +32,7 @@ public class CallerContext implements Context { this.caller = caller; } + @Override public ContextItem get(ContextKey name) { if (name == null) { throw new IllegalArgumentException("name is null"); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ContextInsensitiveSSAInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ContextInsensitiveSSAInterpreter.java index 6a12e650f..e92e86e0c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ContextInsensitiveSSAInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ContextInsensitiveSSAInterpreter.java @@ -36,6 +36,7 @@ public class ContextInsensitiveSSAInterpreter extends ContextInsensitiveRTAInter this.options = options; } + @Override public IR getIR(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -45,6 +46,7 @@ public class ContextInsensitiveSSAInterpreter extends ContextInsensitiveRTAInter return getAnalysisCache().getSSACache().findOrCreateIR(node.getMethod(), Everywhere.EVERYWHERE, options.getSSAOptions()); } + @Override public int getNumberOfStatements(CGNode node) { IR ir = getIR(node); return (ir == null) ? -1 : ir.getInstructions().length; @@ -55,6 +57,7 @@ public class ContextInsensitiveSSAInterpreter extends ContextInsensitiveRTAInter return false; } + @Override public ControlFlowGraph getCFG(CGNode N) { IR ir = getIR(N); if (ir == null) { @@ -64,6 +67,7 @@ public class ContextInsensitiveSSAInterpreter extends ContextInsensitiveRTAInter } } + @Override public DefUse getDU(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/DefaultPointerKeyFactory.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/DefaultPointerKeyFactory.java index 2d06e1f25..5a2e5cf7e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/DefaultPointerKeyFactory.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/DefaultPointerKeyFactory.java @@ -31,6 +31,7 @@ public class DefaultPointerKeyFactory implements PointerKeyFactory { public DefaultPointerKeyFactory() { } + @Override public PointerKey getPointerKeyForLocal(CGNode node, int valueNumber) { if (valueNumber <= 0) { throw new IllegalArgumentException("illegal value number: " + valueNumber + " in " + node); @@ -38,6 +39,7 @@ public class DefaultPointerKeyFactory implements PointerKeyFactory { return new LocalPointerKey(node, valueNumber); } + @Override public FilteredPointerKey getFilteredPointerKeyForLocal(CGNode node, int valueNumber, FilteredPointerKey.TypeFilter filter) { if (filter == null) { throw new IllegalArgumentException("null filter"); @@ -47,14 +49,17 @@ public class DefaultPointerKeyFactory implements PointerKeyFactory { return new LocalPointerKeyWithFilter(node, valueNumber, filter); } + @Override public PointerKey getPointerKeyForReturnValue(CGNode node) { return new ReturnValueKey(node); } + @Override public PointerKey getPointerKeyForExceptionalReturnValue(CGNode node) { return new ExceptionReturnValueKey(node); } + @Override public PointerKey getPointerKeyForStaticField(IField f) { if (f == null) { throw new IllegalArgumentException("null f"); @@ -62,6 +67,7 @@ public class DefaultPointerKeyFactory implements PointerKeyFactory { return new StaticFieldKey(f); } + @Override public PointerKey getPointerKeyForInstanceField(InstanceKey I, IField field) { if (field == null) { throw new IllegalArgumentException("field is null"); @@ -69,6 +75,7 @@ public class DefaultPointerKeyFactory implements PointerKeyFactory { return new InstanceFieldKey(I, field); } + @Override public PointerKey getPointerKeyForArrayContents(InstanceKey I) { return new ArrayContentsKey(I); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/DefaultSSAInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/DefaultSSAInterpreter.java index 80cc3c7b3..cd1b84605 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/DefaultSSAInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/DefaultSSAInterpreter.java @@ -51,10 +51,12 @@ public class DefaultSSAInterpreter extends DefaultRTAInterpreter implements SSAC } + @Override public IR getIR(CGNode node) { return getCFAInterpreter(node).getIR(node); } + @Override public int getNumberOfStatements(CGNode node) { return getCFAInterpreter(node).getNumberOfStatements(node); } @@ -75,10 +77,12 @@ public class DefaultSSAInterpreter extends DefaultRTAInterpreter implements SSAC return false; } + @Override public ControlFlowGraph getCFG(CGNode N) { return getCFAInterpreter(N).getCFG(N); } + @Override public DefUse getDU(CGNode node) { return getCFAInterpreter(node).getDU(node); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/DelegatingSSAContextInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/DelegatingSSAContextInterpreter.java index 4caaf7beb..6b737b1c3 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/DelegatingSSAContextInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/DelegatingSSAContextInterpreter.java @@ -44,6 +44,7 @@ public class DelegatingSSAContextInterpreter extends DelegatingRTAContextInterpr } } + @Override public IR getIR(CGNode node) { if (A != null) { if (A.understands(node)) { @@ -54,6 +55,7 @@ public class DelegatingSSAContextInterpreter extends DelegatingRTAContextInterpr return B.getIR(node); } + @Override public int getNumberOfStatements(CGNode node) { if (A != null) { if (A.understands(node)) { @@ -79,6 +81,7 @@ public class DelegatingSSAContextInterpreter extends DelegatingRTAContextInterpr return result; } + @Override public ControlFlowGraph getCFG(CGNode node) { if (A != null) { if (A.understands(node)) { @@ -89,6 +92,7 @@ public class DelegatingSSAContextInterpreter extends DelegatingRTAContextInterpr return B.getCFG(node); } + @Override public DefUse getDU(CGNode node) { if (A != null) { if (A.understands(node)) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/OneLevelSiteContextSelector.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/OneLevelSiteContextSelector.java index 69edb36f3..4dd136be3 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/OneLevelSiteContextSelector.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/OneLevelSiteContextSelector.java @@ -37,6 +37,7 @@ public class OneLevelSiteContextSelector implements ContextSelector { this.baseSelector = baseSelector; } + @Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { Context baseContext = baseSelector.getCalleeTarget(caller, site, callee, receiver); if (baseContext.equals(Everywhere.EVERYWHERE)) { @@ -46,6 +47,7 @@ public class OneLevelSiteContextSelector implements ContextSelector { } } + @Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { return baseSelector.getRelevantParameters(caller, site); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java index 982ff75e8..03c9ed271 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java @@ -181,6 +181,7 @@ public class ZeroXInstanceKeys implements InstanceKeyFactory { return (policy & CONSTANT_SPECIFIC) > 0; } + @Override public InstanceKey getInstanceKeyForAllocation(CGNode node, NewSiteReference allocation) { if (allocation == null) { throw new IllegalArgumentException("allocation is null"); @@ -246,6 +247,7 @@ public class ZeroXInstanceKeys implements InstanceKeyFactory { return count; } + @Override public InstanceKey getInstanceKeyForMultiNewArray(CGNode node, NewSiteReference allocation, int dim) { if (allocationPolicy()) { return siteBased.getInstanceKeyForMultiNewArray(node, allocation, dim); @@ -254,6 +256,7 @@ public class ZeroXInstanceKeys implements InstanceKeyFactory { } } + @Override public InstanceKey getInstanceKeyForConstant(TypeReference type, T S) { if (type == null) { throw new IllegalArgumentException("null type"); @@ -273,10 +276,12 @@ public class ZeroXInstanceKeys implements InstanceKeyFactory { * @see com.ibm.wala.ipa.callgraph.propagation.InstanceKeyFactory#getInstanceKeyForPEI(com.ibm.wala.ipa.callgraph.CGNode, * com.ibm.wala.classLoader.ProgramCounter, com.ibm.wala.types.TypeReference) */ + @Override public InstanceKey getInstanceKeyForPEI(CGNode node, ProgramCounter pei, TypeReference type) { return classBased.getInstanceKeyForPEI(node, pei, type); } + @Override public InstanceKey getInstanceKeyForClassObject(TypeReference type) { return classBased.getInstanceKeyForClassObject(type); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/BasicRTABuilder.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/BasicRTABuilder.java index 5f24d36f8..daa08fa9d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/BasicRTABuilder.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/BasicRTABuilder.java @@ -149,6 +149,7 @@ public class BasicRTABuilder extends AbstractRTABuilder { System.err.println(("filtered value: " + value)); } IntSetAction action = new IntSetAction() { + @Override public void act(int ptr) { if (DEBUG) { System.err.println((" dispatch to ptr " + ptr)); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/ContextInsensitiveRTAInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/ContextInsensitiveRTAInterpreter.java index 901c6743f..c4727faef 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/ContextInsensitiveRTAInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/ContextInsensitiveRTAInterpreter.java @@ -13,7 +13,6 @@ package com.ibm.wala.ipa.callgraph.propagation.rta; import java.util.Iterator; -import com.ibm.wala.classLoader.CallSiteReference; import com.ibm.wala.classLoader.CodeScanner; import com.ibm.wala.classLoader.IClass; import com.ibm.wala.classLoader.NewSiteReference; @@ -40,6 +39,7 @@ public abstract class ContextInsensitiveRTAInterpreter extends ContextInsensitiv return analysisCache; } + @Override public Iterator iterateNewSites(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -53,6 +53,7 @@ public abstract class ContextInsensitiveRTAInterpreter extends ContextInsensitiv } } + @Override public Iterator iterateFieldsRead(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -66,6 +67,7 @@ public abstract class ContextInsensitiveRTAInterpreter extends ContextInsensitiv } } + @Override public Iterator iterateFieldsWritten(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -79,6 +81,7 @@ public abstract class ContextInsensitiveRTAInterpreter extends ContextInsensitiv } } + @Override public boolean recordFactoryType(CGNode node, IClass klass) { // not a factory type return false; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/DefaultRTAInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/DefaultRTAInterpreter.java index f9344d3cc..bf78234cb 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/DefaultRTAInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/DefaultRTAInterpreter.java @@ -52,6 +52,7 @@ public class DefaultRTAInterpreter implements RTAContextInterpreter { } } + @Override public Iterator iterateNewSites(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -59,6 +60,7 @@ public class DefaultRTAInterpreter implements RTAContextInterpreter { return getNodeInterpreter(node).iterateNewSites(node); } + @Override public Iterator iterateCallSites(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -66,6 +68,7 @@ public class DefaultRTAInterpreter implements RTAContextInterpreter { return getNodeInterpreter(node).iterateCallSites(node); } + @Override public Iterator iterateFieldsRead(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -73,6 +76,7 @@ public class DefaultRTAInterpreter implements RTAContextInterpreter { return getNodeInterpreter(node).iterateFieldsRead(node); } + @Override public Iterator iterateFieldsWritten(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -80,10 +84,12 @@ public class DefaultRTAInterpreter implements RTAContextInterpreter { return getNodeInterpreter(node).iterateFieldsWritten(node); } + @Override public boolean understands(CGNode node) { return true; } + @Override public boolean recordFactoryType(CGNode node, IClass klass) { // not a factory type return false; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/DelegatingRTAContextInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/DelegatingRTAContextInterpreter.java index 118ef6329..2ee25879b 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/DelegatingRTAContextInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/DelegatingRTAContextInterpreter.java @@ -35,6 +35,7 @@ public class DelegatingRTAContextInterpreter implements RTAContextInterpreter { } } + @Override public boolean understands(CGNode node) { if (A != null) { return A.understands(node) || B.understands(node); @@ -43,6 +44,7 @@ public class DelegatingRTAContextInterpreter implements RTAContextInterpreter { } } + @Override public Iterator iterateNewSites(CGNode node) { if (A != null) { if (A.understands(node)) { @@ -53,6 +55,7 @@ public class DelegatingRTAContextInterpreter implements RTAContextInterpreter { return B.iterateNewSites(node); } + @Override public Iterator iterateCallSites(CGNode node) { if (A != null) { if (A.understands(node)) { @@ -63,6 +66,7 @@ public class DelegatingRTAContextInterpreter implements RTAContextInterpreter { return B.iterateCallSites(node); } + @Override public Iterator iterateFieldsRead(CGNode node) { if (A != null) { if (A.understands(node)) { @@ -73,6 +77,7 @@ public class DelegatingRTAContextInterpreter implements RTAContextInterpreter { return B.iterateFieldsRead(node); } + @Override public Iterator iterateFieldsWritten(CGNode node) { if (A != null) { if (A.understands(node)) { @@ -83,6 +88,7 @@ public class DelegatingRTAContextInterpreter implements RTAContextInterpreter { return B.iterateFieldsWritten(node); } + @Override public boolean recordFactoryType(CGNode node, IClass klass) { boolean result = false; if (A != null) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java index a9dbdb57d..a2844d8e8 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java @@ -174,6 +174,7 @@ public class TypeBasedHeapModel implements HeapModel { return result; } + @Override @SuppressWarnings("unchecked") public Iterator iteratePointerKeys() { initAllPKeys(); @@ -185,18 +186,22 @@ public class TypeBasedHeapModel implements HeapModel { }).iterator(); } + @Override public IClassHierarchy getClassHierarchy() { return iKeyFactory.getClassHierarchy(); } + @Override public InstanceKey getInstanceKeyForAllocation(CGNode node, NewSiteReference allocation) throws UnimplementedError { return iKeyFactory.getInstanceKeyForAllocation(node, allocation); } + @Override public InstanceKey getInstanceKeyForMultiNewArray(CGNode node, NewSiteReference allocation, int dim) throws UnimplementedError { return iKeyFactory.getInstanceKeyForMultiNewArray(node, allocation, dim); } + @Override public InstanceKey getInstanceKeyForConstant(TypeReference type, Object S) { return iKeyFactory.getInstanceKeyForConstant(type, S); } @@ -206,11 +211,13 @@ public class TypeBasedHeapModel implements HeapModel { return null; } + @Override public InstanceKey getInstanceKeyForPEI(CGNode node, ProgramCounter instr, TypeReference type) throws UnimplementedError { Assertions.UNREACHABLE(); return null; } + @Override public InstanceKey getInstanceKeyForClassObject(TypeReference type) throws UnimplementedError { Assertions.UNREACHABLE(); return null; @@ -222,6 +229,7 @@ public class TypeBasedHeapModel implements HeapModel { * * @see com.ibm.wala.ipa.callgraph.propagation.PointerKeyFactory#getPointerKeyForLocal(com.ibm.wala.ipa.callgraph.CGNode, int) */ + @Override public FilteredPointerKey getPointerKeyForLocal(CGNode node, int valueNumber) { initPKeysForNode(node); PointerKey p = pointerKeys.getPointerKeyForLocal(node, valueNumber); @@ -250,28 +258,34 @@ public class TypeBasedHeapModel implements HeapModel { } } + @Override public FilteredPointerKey getFilteredPointerKeyForLocal(CGNode node, int valueNumber, FilteredPointerKey.TypeFilter filter) throws UnimplementedError { Assertions.UNREACHABLE(); return null; } + @Override public PointerKey getPointerKeyForReturnValue(CGNode node) { return pointerKeys.getPointerKeyForReturnValue(node); } + @Override public PointerKey getPointerKeyForExceptionalReturnValue(CGNode node) { return pointerKeys.getPointerKeyForExceptionalReturnValue(node); } + @Override public PointerKey getPointerKeyForStaticField(IField f) { return pointerKeys.getPointerKeyForStaticField(f); } + @Override public PointerKey getPointerKeyForInstanceField(InstanceKey I, IField field) { return pointerKeys.getPointerKeyForInstanceField(I, field); } + @Override public PointerKey getPointerKeyForArrayContents(InstanceKey I) { return pointerKeys.getPointerKeyForArrayContents(I); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedPointerAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedPointerAnalysis.java index e0da1ed9c..8e8a3b5ec 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedPointerAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedPointerAnalysis.java @@ -83,6 +83,7 @@ public class TypeBasedPointerAnalysis extends AbstractPointerAnalysis { return new TypeBasedPointerAnalysis(options, klasses, cg); } + @Override public OrdinalSet getPointsToSet(PointerKey key) throws IllegalArgumentException { if (key == null) { throw new IllegalArgumentException("key == null"); @@ -169,18 +170,22 @@ public class TypeBasedPointerAnalysis extends AbstractPointerAnalysis { } } + @Override public HeapModel getHeapModel() { return heapModel; } + @Override public Collection getPointerKeys() { return Iterator2Collection.toSet(heapModel.iteratePointerKeys()); } + @Override public boolean isFiltered(PointerKey pk) { return false; } + @Override public IClassHierarchy getClassHierarchy() { return heapModel.getClassHierarchy(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java index fb33cbe30..c16e6bd25 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java @@ -390,6 +390,7 @@ public abstract class AbstractInterproceduralCFG imple /* * @see com.ibm.wala.util.graph.Graph#removeNodeAndEdges(com.ibm.wala.util.graph.Node) */ + @Override public void removeNodeAndEdges(BasicBlockInContext N) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } @@ -397,6 +398,7 @@ public abstract class AbstractInterproceduralCFG imple /* * @see com.ibm.wala.util.graph.NodeManager#iterateNodes() */ + @Override public Iterator> iterator() { if (WARN_ON_EAGER_CONSTRUCTION) { System.err.println("WARNING: forcing full ICFG construction by calling iterator()"); @@ -411,6 +413,7 @@ public abstract class AbstractInterproceduralCFG imple /* * @see com.ibm.wala.util.graph.NodeManager#getNumberOfNodes() */ + @Override public int getNumberOfNodes() { if (WARN_ON_EAGER_CONSTRUCTION) { System.err.println("WARNING: forcing full ICFG construction by calling getNumberOfNodes()"); @@ -537,6 +540,7 @@ public abstract class AbstractInterproceduralCFG imple /* * @see com.ibm.wala.util.graph.NodeManager#addNode(com.ibm.wala.util.graph.Node) */ + @Override public void addNode(BasicBlockInContext n) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } @@ -544,6 +548,7 @@ public abstract class AbstractInterproceduralCFG imple /* * @see com.ibm.wala.util.graph.NodeManager#removeNode(com.ibm.wala.util.graph.Node) */ + @Override public void removeNode(BasicBlockInContext n) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } @@ -551,6 +556,7 @@ public abstract class AbstractInterproceduralCFG imple /* * @see com.ibm.wala.util.graph.EdgeManager#getPredNodes(com.ibm.wala.util.graph.Node) */ + @Override public Iterator> getPredNodes(BasicBlockInContext N) { initForPred(N); return g.getPredNodes(N); @@ -595,6 +601,7 @@ public abstract class AbstractInterproceduralCFG imple /* * @see com.ibm.wala.util.graph.EdgeManager#getPredNodeCount(com.ibm.wala.util.graph.Node) */ + @Override public int getPredNodeCount(BasicBlockInContext N) { initForPred(N); return g.getPredNodeCount(N); @@ -603,6 +610,7 @@ public abstract class AbstractInterproceduralCFG imple /* * @see com.ibm.wala.util.graph.EdgeManager#getSuccNodes(com.ibm.wala.util.graph.Node) */ + @Override public Iterator> getSuccNodes(BasicBlockInContext N) { initForSucc(N); return g.getSuccNodes(N); @@ -611,6 +619,7 @@ public abstract class AbstractInterproceduralCFG imple /* * @see com.ibm.wala.util.graph.EdgeManager#getSuccNodeCount(com.ibm.wala.util.graph.Node) */ + @Override public int getSuccNodeCount(BasicBlockInContext N) { initForSucc(N); return g.getSuccNodeCount(N); @@ -619,10 +628,12 @@ public abstract class AbstractInterproceduralCFG imple /* * @see com.ibm.wala.util.graph.EdgeManager#addEdge(com.ibm.wala.util.graph.Node, com.ibm.wala.util.graph.Node) */ + @Override public void addEdge(BasicBlockInContext src, BasicBlockInContext dst) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } + @Override public void removeEdge(BasicBlockInContext src, BasicBlockInContext dst) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } @@ -630,6 +641,7 @@ public abstract class AbstractInterproceduralCFG imple /* * @see com.ibm.wala.util.graph.EdgeManager#removeEdges(com.ibm.wala.util.graph.Node) */ + @Override public void removeAllIncidentEdges(BasicBlockInContext node) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } @@ -642,6 +654,7 @@ public abstract class AbstractInterproceduralCFG imple /* * @see com.ibm.wala.util.graph.Graph#containsNode(com.ibm.wala.util.graph.Node) */ + @Override public boolean containsNode(BasicBlockInContext N) { return g.containsNode(N); } @@ -709,14 +722,17 @@ public abstract class AbstractInterproceduralCFG imple return site; } + @Override public void removeIncomingEdges(BasicBlockInContext node) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } + @Override public void removeOutgoingEdges(BasicBlockInContext node) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } + @Override public boolean hasEdge(BasicBlockInContext src, BasicBlockInContext dst) { if (!addedSuccs.contains(getNumber(src))) { if (!src.getNode().equals(dst.getNode())) { @@ -747,15 +763,18 @@ public abstract class AbstractInterproceduralCFG imple return g.hasEdge(src, dst); } + @Override public int getNumber(BasicBlockInContext N) { addNodeForBasicBlockIfNeeded(N); return g.getNumber(N); } + @Override public BasicBlockInContext getNode(int number) throws UnimplementedError { return g.getNode(number); } + @Override public int getMaxNumber() { if (WARN_ON_EAGER_CONSTRUCTION) { System.err.println("WARNING: forcing full ICFG construction by calling getMaxNumber()"); @@ -767,16 +786,19 @@ public abstract class AbstractInterproceduralCFG imple return g.getMaxNumber(); } + @Override public Iterator> iterateNodes(IntSet s) throws UnimplementedError { Assertions.UNREACHABLE(); return null; } + @Override public IntSet getSuccNodeNumbers(BasicBlockInContext node) { initForSucc(node); return g.getSuccNodeNumbers(node); } + @Override public IntSet getPredNodeNumbers(BasicBlockInContext node) { initForPred(node); return g.getPredNodeNumbers(node); @@ -812,6 +834,7 @@ public abstract class AbstractInterproceduralCFG imple // a successor node is a return site if it is in the same // procedure, and is not the entry() node. Filter isReturn = new Filter() { + @Override public boolean accepts(Object o) { BasicBlockInContext other = (BasicBlockInContext) o; return !other.isEntryBlock() && node.equals(other.getNode()); @@ -833,6 +856,7 @@ public abstract class AbstractInterproceduralCFG imple final CGNode node = returnBlock.getNode(); Filter dispatchFilter = new Filter() { + @Override public boolean accepts(T callBlock) { BasicBlockInContext bb = new BasicBlockInContext(node, callBlock); if (!hasCall(bb, cfg)) { @@ -848,6 +872,7 @@ public abstract class AbstractInterproceduralCFG imple it = new FilterIterator(it, dispatchFilter); Function> toContext = new Function>() { + @Override public BasicBlockInContext apply(T object) { T b = object; return new BasicBlockInContext(node, b); @@ -858,6 +883,7 @@ public abstract class AbstractInterproceduralCFG imple } private final Filter> isCall = new Filter>() { + @Override public boolean accepts(BasicBlockInContext o) { return hasCall(o); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/BasicBlockInContext.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/BasicBlockInContext.java index d58d94a40..787cb7d46 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/BasicBlockInContext.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/BasicBlockInContext.java @@ -40,6 +40,7 @@ public final class BasicBlockInContext extends NodeWit /* * @see com.ibm.wala.cfg.IBasicBlock#getFirstInstructionIndex() */ + @Override public int getFirstInstructionIndex() { return delegate.getFirstInstructionIndex(); } @@ -47,6 +48,7 @@ public final class BasicBlockInContext extends NodeWit /* * @see com.ibm.wala.cfg.IBasicBlock#getLastInstructionIndex() */ + @Override public int getLastInstructionIndex() { return delegate.getLastInstructionIndex(); } @@ -54,6 +56,7 @@ public final class BasicBlockInContext extends NodeWit /* * @see com.ibm.wala.cfg.IBasicBlock#iterateAllInstructions() */ + @Override public Iterator iterator() { return delegate.iterator(); } @@ -61,6 +64,7 @@ public final class BasicBlockInContext extends NodeWit /* * @see com.ibm.wala.cfg.IBasicBlock#getMethod() */ + @Override public IMethod getMethod() { return delegate.getMethod(); } @@ -68,6 +72,7 @@ public final class BasicBlockInContext extends NodeWit /* * @see com.ibm.wala.cfg.IBasicBlock#getNumber() */ + @Override public int getNumber() { return delegate.getNumber(); } @@ -75,6 +80,7 @@ public final class BasicBlockInContext extends NodeWit /* * @see com.ibm.wala.cfg.IBasicBlock#isCatchBlock() */ + @Override public boolean isCatchBlock() { return delegate.isCatchBlock(); } @@ -82,6 +88,7 @@ public final class BasicBlockInContext extends NodeWit /* * @see com.ibm.wala.cfg.IBasicBlock#isEntryBlock() */ + @Override public boolean isEntryBlock() { return delegate.isEntryBlock(); } @@ -89,6 +96,7 @@ public final class BasicBlockInContext extends NodeWit /* * @see com.ibm.wala.cfg.IBasicBlock#isExitBlock() */ + @Override public boolean isExitBlock() { return delegate.isExitBlock(); } @@ -137,18 +145,22 @@ public final class BasicBlockInContext extends NodeWit return delegate.toString(); } + @Override public Iterator getCaughtExceptionTypes() { return delegate.getCaughtExceptionTypes(); } + @Override public SSAInstruction getLastInstruction() { return delegate.getLastInstruction(); } + @Override public Iterator iteratePhis() { return delegate.iteratePhis(); } + @Override public Iterator iteratePis() { return delegate.iteratePis(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/ExceptionPrunedCFG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/ExceptionPrunedCFG.java index 6af6a3c33..d56bd172a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/ExceptionPrunedCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/ExceptionPrunedCFG.java @@ -25,10 +25,12 @@ public class ExceptionPrunedCFG { this.cfg = cfg; } + @Override public boolean hasNormalEdge(T src, T dst) { return cfg.getNormalSuccessors(src).contains(dst); } + @Override public boolean hasExceptionalEdge(T src, T dst) { return false; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java index 4cd6d34d4..5a33e751a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java @@ -70,6 +70,7 @@ public class PrunedCFG> extends AbstractNumberedGrap public Iterator getExceptionalSuccessors(final T N) { return new FilterIterator(cfg.getExceptionalSuccessors(N).iterator(), new Filter() { + @Override public boolean accepts(T o) { return currentCFGNodes.containsNode(o) && filter.hasExceptionalEdge(N, o); } @@ -78,6 +79,7 @@ public class PrunedCFG> extends AbstractNumberedGrap public Iterator getNormalSuccessors(final T N) { return new FilterIterator(cfg.getNormalSuccessors(N).iterator(), new Filter() { + @Override public boolean accepts(T o) { return currentCFGNodes.containsNode(o) && filter.hasNormalEdge(N, o); } @@ -86,6 +88,7 @@ public class PrunedCFG> extends AbstractNumberedGrap public Iterator getExceptionalPredecessors(final T N) { return new FilterIterator(cfg.getExceptionalPredecessors(N).iterator(), new Filter() { + @Override public boolean accepts(T o) { return currentCFGNodes.containsNode(o) && filter.hasExceptionalEdge(o, N); } @@ -94,24 +97,29 @@ public class PrunedCFG> extends AbstractNumberedGrap public Iterator getNormalPredecessors(final T N) { return new FilterIterator(cfg.getNormalPredecessors(N).iterator(), new Filter() { + @Override public boolean accepts(T o) { return currentCFGNodes.containsNode(o) && filter.hasNormalEdge(o, N); } }); } + @Override public Iterator getSuccNodes(final T N) { return new FilterIterator(cfg.getSuccNodes(N), new Filter() { + @Override public boolean accepts(T o) { return currentCFGNodes.containsNode(o) && (filter.hasNormalEdge(N, o) || filter.hasExceptionalEdge(N, o)); } }); } + @Override public int getSuccNodeCount(T N) { return Iterator2Collection.toSet(getSuccNodes(N)).size(); } + @Override public IntSet getSuccNodeNumbers(T N) { MutableIntSet bits = IntSetUtil.make(); for (Iterator EE = getSuccNodes(N); EE.hasNext();) { @@ -121,18 +129,22 @@ public class PrunedCFG> extends AbstractNumberedGrap return bits; } + @Override public Iterator getPredNodes(final T N) { return new FilterIterator(cfg.getPredNodes(N), new Filter() { + @Override public boolean accepts(T o) { return currentCFGNodes.containsNode(o) && (filter.hasNormalEdge(o, N) || filter.hasExceptionalEdge(o, N)); } }); } + @Override public int getPredNodeCount(T N) { return Iterator2Collection.toSet(getPredNodes(N)).size(); } + @Override public IntSet getPredNodeNumbers(T N) { MutableIntSet bits = IntSetUtil.make(); for (Iterator EE = getPredNodes(N); EE.hasNext();) { @@ -142,6 +154,7 @@ public class PrunedCFG> extends AbstractNumberedGrap return bits; } + @Override public boolean hasEdge(T src, T dst) { for (Iterator EE = getSuccNodes(src); EE.hasNext();) { if (EE.next().equals(dst)) { @@ -152,22 +165,27 @@ public class PrunedCFG> extends AbstractNumberedGrap return false; } + @Override public void addEdge(T src, T dst) { throw new UnsupportedOperationException(); } + @Override public void removeEdge(T src, T dst) { throw new UnsupportedOperationException(); } + @Override public void removeAllIncidentEdges(T node) { throw new UnsupportedOperationException(); } + @Override public void removeIncomingEdges(T node) { throw new UnsupportedOperationException(); } + @Override public void removeOutgoingEdges(T node) { throw new UnsupportedOperationException(); } @@ -183,6 +201,7 @@ public class PrunedCFG> extends AbstractNumberedGrap this.subset = subset; } + @Override public int getNumber(T N) { if (subset.contains(N)) return nodes.getNumber(N); @@ -190,6 +209,7 @@ public class PrunedCFG> extends AbstractNumberedGrap return -1; } + @Override public T getNode(int number) { T N = nodes.getNode(number); if (subset.contains(N)) @@ -198,6 +218,7 @@ public class PrunedCFG> extends AbstractNumberedGrap throw new NoSuchElementException(); } + @Override public int getMaxNumber() { int max = -1; for (Iterator NS = nodes.iterator(); NS.hasNext();) { @@ -212,32 +233,39 @@ public class PrunedCFG> extends AbstractNumberedGrap private Iterator filterNodes(Iterator nodeIterator) { return new FilterIterator(nodeIterator, new Filter() { + @Override public boolean accepts(Object o) { return subset.contains(o); } }); } + @Override public Iterator iterateNodes(IntSet s) { return filterNodes(nodes.iterateNodes(s)); } + @Override public Iterator iterator() { return filterNodes(nodes.iterator()); } + @Override public int getNumberOfNodes() { return subset.size(); } + @Override public void addNode(T n) { throw new UnsupportedOperationException(); } + @Override public void removeNode(T n) { throw new UnsupportedOperationException(); } + @Override public boolean containsNode(T N) { return subset.contains(N); } @@ -283,6 +311,7 @@ public class PrunedCFG> extends AbstractNumberedGrap return edges; } + @Override public List getExceptionalSuccessors(final T N) { ArrayList result = new ArrayList(); for (Iterator it = edges.getExceptionalSuccessors(N); it.hasNext();) { @@ -291,42 +320,52 @@ public class PrunedCFG> extends AbstractNumberedGrap return result; } + @Override public Collection getNormalSuccessors(final T N) { return Iterator2Collection.toSet(edges.getNormalSuccessors(N)); } + @Override public Collection getExceptionalPredecessors(final T N) { return Iterator2Collection.toSet(edges.getExceptionalPredecessors(N)); } + @Override public Collection getNormalPredecessors(final T N) { return Iterator2Collection.toSet(edges.getNormalPredecessors(N)); } + @Override public T entry() { return cfg.entry(); } + @Override public T exit() { return cfg.exit(); } + @Override public T getBlockForInstruction(int index) { return cfg.getBlockForInstruction(index); } + @Override public I[] getInstructions() { return cfg.getInstructions(); } + @Override public int getProgramCounter(int index) { return cfg.getProgramCounter(index); } + @Override public IMethod getMethod() { return cfg.getMethod(); } + @Override public BitVector getCatchBlocks() { BitVector result = new BitVector(); BitVector blocks = cfg.getCatchBlocks(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java index 231e6e773..7da559fa6 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java @@ -290,6 +290,7 @@ public class ClassHierarchy implements IClassHierarchy { * @return true if the add succeeded; false if it failed for some reason * @throws IllegalArgumentException if klass is null */ + @Override public boolean addClass(IClass klass) { if (klass == null) { throw new IllegalArgumentException("klass is null"); @@ -389,6 +390,7 @@ public class ClassHierarchy implements IClassHierarchy { * @return the set of IMethods that this call can resolve to. * @throws IllegalArgumentException if ref is null */ + @Override public Set getPossibleTargets(MethodReference ref) { if (ref == null) { throw new IllegalArgumentException("ref is null"); @@ -437,6 +439,7 @@ public class ClassHierarchy implements IClassHierarchy { * @param ref method reference * @return the set of IMethods that this call can resolve to. */ + @Override public Set getPossibleTargets(IClass declaredClass, MethodReference ref) { if (ref.getName().equals(MethodReference.initAtom)) { @@ -504,6 +507,7 @@ public class ClassHierarchy implements IClassHierarchy { * @return IMethod, or null if no appropriate receiver is found. * @throws IllegalArgumentException if m is null */ + @Override public IMethod resolveMethod(MethodReference m) { if (m == null) { throw new IllegalArgumentException("m is null"); @@ -520,6 +524,7 @@ public class ClassHierarchy implements IClassHierarchy { * @return the canonical IField that represents a given field , or null if none found * @throws IllegalArgumentException if f is null */ + @Override public IField resolveField(FieldReference f) { if (f == null) { throw new IllegalArgumentException("f is null"); @@ -536,6 +541,7 @@ public class ClassHierarchy implements IClassHierarchy { * @throws IllegalArgumentException if f is null * @throws IllegalArgumentException if klass is null */ + @Override public IField resolveField(IClass klass, FieldReference f) { if (klass == null) { throw new IllegalArgumentException("klass is null"); @@ -554,6 +560,7 @@ public class ClassHierarchy implements IClassHierarchy { * @return Method resolved method abstraction * @throws IllegalArgumentException if receiverClass is null */ + @Override public IMethod resolveMethod(IClass receiverClass, Selector selector) { if (receiverClass == null) { throw new IllegalArgumentException("receiverClass is null"); @@ -723,6 +730,7 @@ public class ClassHierarchy implements IClassHierarchy { } + @Override public ClassLoaderFactory getFactory() { return factory; } @@ -730,6 +738,7 @@ public class ClassHierarchy implements IClassHierarchy { /** * @throws IllegalArgumentException if A is null */ + @Override public IClass getLeastCommonSuperclass(IClass a, IClass b) { assert (a.getClassLoader().getLanguage().equals(b.getClassLoader().getLanguage())); Language lang = a.getClassLoader().getLanguage(); @@ -791,6 +800,7 @@ public class ClassHierarchy implements IClassHierarchy { * @see com.ibm.wala.ipa.cha.IClassHierarchy#getLeastCommonSuperclass(com.ibm.wala.types.TypeReference, * com.ibm.wala.types.TypeReference) */ + @Override public TypeReference getLeastCommonSuperclass(TypeReference a, TypeReference b) { if (a == null) { throw new IllegalArgumentException("a is null"); @@ -818,6 +828,7 @@ public class ClassHierarchy implements IClassHierarchy { * @return the {@link IClass} for a if found; null if can't find the class. * @throws IllegalArgumentException if A is null */ + @Override public IClass lookupClass(TypeReference a) { if (a == null) { throw new IllegalArgumentException("a is null"); @@ -878,6 +889,7 @@ public class ClassHierarchy implements IClassHierarchy { * * @throws IllegalArgumentException if c is null */ + @Override public boolean isSubclassOf(IClass c, IClass t) { if (c == null) { throw new IllegalArgumentException("c is null"); @@ -943,6 +955,7 @@ public class ClassHierarchy implements IClassHierarchy { * * @return true iff i is an interface and c is a class that implements i, or c is an interface that extends i. */ + @Override public boolean implementsInterface(IClass c, IClass i) { if (i == null) { throw new IllegalArgumentException("Cannot ask implementsInterface with i == null"); @@ -970,6 +983,7 @@ public class ClassHierarchy implements IClassHierarchy { /** * Return set of all subclasses of type in the Class Hierarchy TODO: Tune this implementation. Consider caching if necessary. */ + @Override public Collection computeSubClasses(TypeReference type) { IClass t = lookupClass(type); if (t == null) { @@ -996,6 +1010,7 @@ public class ClassHierarchy implements IClassHierarchy { * * kind of ugly. a better scheme? */ + @Override public Collection getJavaLangErrorTypes() { if (subTypeRefsOfError == null) { computeSubClasses(TypeReference.JavaLangError); @@ -1013,6 +1028,7 @@ public class ClassHierarchy implements IClassHierarchy { * * kind of ugly. a better scheme? */ + @Override public Collection getJavaLangRuntimeExceptionTypes() { if (runtimeExceptionTypeRefs == null) { computeSubClasses(TypeReference.JavaLangRuntimeException); @@ -1045,6 +1061,7 @@ public class ClassHierarchy implements IClassHierarchy { return result; } + @Override public boolean isInterface(TypeReference type) { IClass T = lookupClass(type); assert T != null : "Null lookup for " + type; @@ -1057,6 +1074,7 @@ public class ClassHierarchy implements IClassHierarchy { * @param type an interface * @return Set of IClass that represent implementors of the interface */ + @Override public Set getImplementors(TypeReference type) { IClass T = lookupClass(type); Set result = implementors.get(T); @@ -1066,8 +1084,10 @@ public class ClassHierarchy implements IClassHierarchy { return Collections.unmodifiableSet(result); } + @Override public Iterator iterator() { Function toClass = new Function() { + @Override public IClass apply(Node n) { return n.klass; } @@ -1078,14 +1098,17 @@ public class ClassHierarchy implements IClassHierarchy { /** * @return The number of classes present in the class hierarchy. */ + @Override public int getNumberOfClasses() { return map.keySet().size(); } + @Override public IClassLoader[] getLoaders() { return loaders; } + @Override public IClassLoader getLoader(ClassLoaderReference loaderRef) { for (int i = 0; i < loaders.length; i++) { if (loaders[i].getReference().equals(loaderRef)) { @@ -1096,6 +1119,7 @@ public class ClassHierarchy implements IClassHierarchy { return null; } + @Override public AnalysisScope getScope() { return scope; } @@ -1104,6 +1128,7 @@ public class ClassHierarchy implements IClassHierarchy { * @return the number of classes that immediately extend klass. if klass is an array class A[][]...[], we return number of * immediate subclasses of A. If A is primitive, we return 0. */ + @Override public int getNumberOfImmediateSubclasses(IClass klass) { if (klass.isArrayClass()) { IClass innermost = getInnermostTypeOfArrayClass(klass); @@ -1118,11 +1143,13 @@ public class ClassHierarchy implements IClassHierarchy { * @return the classes that immediately extend klass. if klass is an array class A[][]...[], we return array classes B[][]...[] * (same dimensionality) where B is an immediate subclass of A. If A is primitive, we return the empty set. */ + @Override public Collection getImmediateSubclasses(IClass klass) { if (klass.isArrayClass()) { return getImmediateArraySubclasses((ArrayClass)klass); } Function node2Class = new Function() { + @Override public IClass apply(Node n) { return n.klass; } @@ -1219,10 +1246,12 @@ public class ClassHierarchy implements IClassHierarchy { return new ClassHierarchy(scope, factory, language, monitor); } + @Override public IClass getRootClass() { return root.getJavaClass(); } + @Override public boolean isRootClass(IClass c) throws IllegalArgumentException { if (c == null) { throw new IllegalArgumentException("c == null"); @@ -1230,6 +1259,7 @@ public class ClassHierarchy implements IClassHierarchy { return c.equals(root.getJavaClass()); } + @Override public int getNumber(IClass c) { return map.get(c.getReference()).left; } @@ -1267,6 +1297,7 @@ public class ClassHierarchy implements IClassHierarchy { * @throws IllegalArgumentException if c1 is null * @throws IllegalArgumentException if c2 is null */ + @Override public boolean isAssignableFrom(IClass c1, IClass c2) { if (c2 == null) { throw new IllegalArgumentException("c2 is null"); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/DelegatingExtendedHeapModel.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/DelegatingExtendedHeapModel.java index 91cedd96c..dbfd755b7 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/DelegatingExtendedHeapModel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/DelegatingExtendedHeapModel.java @@ -38,30 +38,37 @@ public class DelegatingExtendedHeapModel implements ExtendedHeapModel { this.h = h; } + @Override public IClassHierarchy getClassHierarchy() { return h.getClassHierarchy(); } + @Override public FilteredPointerKey getFilteredPointerKeyForLocal(CGNode node, int valueNumber, FilteredPointerKey.TypeFilter filter) { return h.getFilteredPointerKeyForLocal(node, valueNumber, filter); } + @Override public InstanceKey getInstanceKeyForAllocation(CGNode node, NewSiteReference allocation) { return h.getInstanceKeyForAllocation(node, allocation); } + @Override public InstanceKey getInstanceKeyForClassObject(TypeReference type) { return h.getInstanceKeyForClassObject(type); } + @Override public InstanceKey getInstanceKeyForConstant(TypeReference type, T S) { return h.getInstanceKeyForConstant(type, S); } + @Override public InstanceKey getInstanceKeyForMultiNewArray(CGNode node, NewSiteReference allocation, int dim) { return h.getInstanceKeyForMultiNewArray(node, allocation, dim); } + @Override public InstanceKey getInstanceKeyForPEI(CGNode node, ProgramCounter instr, TypeReference type) { if (node == null) { throw new IllegalArgumentException("null node"); @@ -69,6 +76,7 @@ public class DelegatingExtendedHeapModel implements ExtendedHeapModel { return h.getInstanceKeyForPEI(node, instr, type); } + @Override public PointerKey getPointerKeyForArrayContents(InstanceKey I) { if (I == null) { throw new IllegalArgumentException("I is null"); @@ -76,10 +84,12 @@ public class DelegatingExtendedHeapModel implements ExtendedHeapModel { return h.getPointerKeyForArrayContents(I); } + @Override public PointerKey getPointerKeyForExceptionalReturnValue(CGNode node) { return h.getPointerKeyForExceptionalReturnValue(node); } + @Override public PointerKey getPointerKeyForInstanceField(InstanceKey I, IField field) { if (field == null) { throw new IllegalArgumentException("field is null"); @@ -87,22 +97,27 @@ public class DelegatingExtendedHeapModel implements ExtendedHeapModel { return h.getPointerKeyForInstanceField(I, field); } + @Override public PointerKey getPointerKeyForLocal(CGNode node, int valueNumber) { return h.getPointerKeyForLocal(node, valueNumber); } + @Override public PointerKey getPointerKeyForReturnValue(CGNode node) { return h.getPointerKeyForReturnValue(node); } + @Override public PointerKey getPointerKeyForStaticField(IField f) { return h.getPointerKeyForStaticField(f); } + @Override public Iterator iteratePointerKeys() { return h.iteratePointerKeys(); } + @Override public PointerKey getPointerKeyForArrayLength(InstanceKey I) { return new ArrayLengthKey(I); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/GenReach.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/GenReach.java index 138c30eef..07e2d1e72 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/GenReach.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/GenReach.java @@ -61,10 +61,12 @@ public class GenReach extends BitVectorFramework { this.gen = gen; } + @Override public AbstractMeetOperator getMeetOperator() { return BitVectorUnion.instance(); } + @Override public UnaryOperator getNodeTransferFunction(T node) { BitVector v = getGen(node); return new BitVectorUnionVector(v); @@ -83,14 +85,17 @@ public class GenReach extends BitVectorFramework { } } + @Override public boolean hasEdgeTransferFunctions() { return false; } + @Override public boolean hasNodeTransferFunctions() { return true; } + @Override public UnaryOperator getEdgeTransferFunction(T src, T dst) { Assertions.UNREACHABLE(); return null; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/ModRef.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/ModRef.java index f20c98037..a5e1072d2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/ModRef.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/ModRef.java @@ -105,6 +105,7 @@ public class ModRef { return CallGraphTransitiveClosure.collectNodeResults(cg, new Function>() { + @Override public Collection apply(CGNode n) { return scanNodeForMod(n, pa, heapExclude); } @@ -120,6 +121,7 @@ public class ModRef { private Map> scanForRef(CallGraph cg, final PointerAnalysis pa, final HeapExclusions heapExclude) { return CallGraphTransitiveClosure.collectNodeResults(cg, new Function>() { + @Override public Collection apply(CGNode n) { return scanNodeForRef(n, pa, heapExclude); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ExceptionalReturnCaller.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ExceptionalReturnCaller.java index 580281ea8..079d192ad 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ExceptionalReturnCaller.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ExceptionalReturnCaller.java @@ -23,6 +23,7 @@ public class ExceptionalReturnCaller extends StatementWithInstructionIndex imple super(node, callIndex); } + @Override public int getValueNumber() { return getInstruction().getException(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/HeapReachingDefs.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/HeapReachingDefs.java index 86015509f..56c20c607 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/HeapReachingDefs.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/HeapReachingDefs.java @@ -214,21 +214,25 @@ public class HeapReachingDefs { return delegate.toString(); } + @Override public void clear() { Assertions.UNREACHABLE(); delegate.clear(); } + @Override public boolean containsKey(Object key) { Assertions.UNREACHABLE(); return delegate.containsKey(key); } + @Override public boolean containsValue(Object value) { Assertions.UNREACHABLE(); return delegate.containsValue(value); } + @Override public Set>> entrySet() { Assertions.UNREACHABLE(); return delegate.entrySet(); @@ -240,6 +244,7 @@ public class HeapReachingDefs { return delegate.equals(o); } + @Override public OrdinalSet get(Object key) { return delegate.get(key); } @@ -250,35 +255,42 @@ public class HeapReachingDefs { return delegate.hashCode(); } + @Override public boolean isEmpty() { Assertions.UNREACHABLE(); return delegate.isEmpty(); } + @Override public Set keySet() { return delegate.keySet(); } + @Override public OrdinalSet put(Statement key, OrdinalSet value) { Assertions.UNREACHABLE(); return delegate.put(key, value); } + @Override public void putAll(Map> t) { Assertions.UNREACHABLE(); delegate.putAll(t); } + @Override public OrdinalSet remove(Object key) { Assertions.UNREACHABLE(); return delegate.remove(key); } + @Override public int size() { Assertions.UNREACHABLE(); return delegate.size(); } + @Override public Collection> values() { Assertions.UNREACHABLE(); return delegate.values(); @@ -505,6 +517,7 @@ public class HeapReachingDefs { } } + @Override public UnaryOperator getEdgeTransferFunction(IExplodedBasicBlock src, IExplodedBasicBlock dst) { if (DEBUG) { System.err.println("getEdgeXfer: " + src + " " + dst + " " + src.isEntryBlock()); @@ -546,18 +559,22 @@ public class HeapReachingDefs { } } + @Override public AbstractMeetOperator getMeetOperator() { return BitVectorUnion.instance(); } + @Override public UnaryOperator getNodeTransferFunction(IExplodedBasicBlock node) { return null; } + @Override public boolean hasEdgeTransferFunctions() { return true; } + @Override public boolean hasNodeTransferFunctions() { return false; } @@ -627,6 +644,7 @@ public class HeapReachingDefs { } else { // only static fields are actually killed Filter staticFilter = new Filter() { + @Override public boolean accepts(Object o) { return o instanceof StaticFieldKey; } @@ -638,6 +656,7 @@ public class HeapReachingDefs { } else { Filter f = new Filter() { // accept any statement which writes a killed location. + @Override public boolean accepts(Object o) { Statement s = (Statement) o; Collection m = getMod(s, node, h, pa, exclusions); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/NormalReturnCaller.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/NormalReturnCaller.java index 7a2eed40a..3bdc8cfda 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/NormalReturnCaller.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/NormalReturnCaller.java @@ -23,6 +23,7 @@ public class NormalReturnCaller extends StatementWithInstructionIndex implements super(node, callIndex); } + @Override public int getValueNumber() { return getInstruction().getReturnValue(0); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/PDG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/PDG.java index 271052848..a10b5afa2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/PDG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/PDG.java @@ -661,6 +661,7 @@ public class PDG implements NumberedGraph { // in reaching defs calculation, exclude heap statements that are // irrelevant. Filter f = new Filter() { + @Override public boolean accepts(Object o) { if (o instanceof HeapStatement) { HeapStatement h = (HeapStatement) o; @@ -753,6 +754,7 @@ public class PDG implements NumberedGraph { */ private Collection computeReturnStatements(final IR ir) { Filter filter = new Filter() { + @Override public boolean accepts(Object o) { if (o instanceof NormalStatement) { NormalStatement s = (NormalStatement) o; @@ -1073,12 +1075,14 @@ public class PDG implements NumberedGraph { return 103 * node.hashCode(); } + @Override public int getPredNodeCount(Statement N) throws UnimplementedError { populate(); Assertions.UNREACHABLE(); return delegate.getPredNodeCount(N); } + @Override public Iterator getPredNodes(Statement N) { populate(); if (!dOptions.isIgnoreHeap()) { @@ -1127,12 +1131,14 @@ public class PDG implements NumberedGraph { } } + @Override public int getSuccNodeCount(Statement N) throws UnimplementedError { populate(); Assertions.UNREACHABLE(); return delegate.getSuccNodeCount(N); } + @Override public Iterator getSuccNodes(Statement N) { populate(); if (!dOptions.isIgnoreHeap()) { @@ -1141,83 +1147,101 @@ public class PDG implements NumberedGraph { return delegate.getSuccNodes(N); } + @Override public boolean hasEdge(Statement src, Statement dst) throws UnimplementedError { populate(); return delegate.hasEdge(src, dst); } + @Override public void removeNodeAndEdges(Statement N) throws UnsupportedOperationException { Assertions.UNREACHABLE(); } + @Override public void addNode(Statement n) { Assertions.UNREACHABLE(); } + @Override public boolean containsNode(Statement N) { populate(); return delegate.containsNode(N); } + @Override public int getNumberOfNodes() { populate(); return delegate.getNumberOfNodes(); } + @Override public Iterator iterator() { populate(); return delegate.iterator(); } + @Override public void removeNode(Statement n) { Assertions.UNREACHABLE(); } + @Override public void addEdge(Statement src, Statement dst) { Assertions.UNREACHABLE(); } + @Override public void removeAllIncidentEdges(Statement node) throws UnsupportedOperationException { Assertions.UNREACHABLE(); } + @Override public void removeEdge(Statement src, Statement dst) throws UnsupportedOperationException { Assertions.UNREACHABLE(); } + @Override public void removeIncomingEdges(Statement node) throws UnsupportedOperationException { Assertions.UNREACHABLE(); } + @Override public void removeOutgoingEdges(Statement node) throws UnsupportedOperationException { Assertions.UNREACHABLE(); } + @Override public int getMaxNumber() { populate(); return delegate.getMaxNumber(); } + @Override public Statement getNode(int number) { populate(); return delegate.getNode(number); } + @Override public int getNumber(Statement N) { populate(); return delegate.getNumber(N); } + @Override public Iterator iterateNodes(IntSet s) { Assertions.UNREACHABLE(); return null; } + @Override public IntSet getPredNodeNumbers(Statement node) { Assertions.UNREACHABLE(); return null; } + @Override public IntSet getSuccNodeNumbers(Statement node) { Assertions.UNREACHABLE(); return null; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ParamCallee.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ParamCallee.java index 4ef8cb584..ec8b7f87f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ParamCallee.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ParamCallee.java @@ -31,6 +31,7 @@ public class ParamCallee extends Statement implements ValueNumberCarrier { return Kind.PARAM_CALLEE; } + @Override public int getValueNumber() { return valueNumber; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ParamCaller.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ParamCaller.java index 430d27636..52570bf57 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ParamCaller.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ParamCaller.java @@ -42,6 +42,7 @@ public class ParamCaller extends StatementWithInstructionIndex implements ValueN return super.toString() + " v" + getValueNumber(); } + @Override public int getValueNumber() { return valueNumber; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ReachabilityFunctions.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ReachabilityFunctions.java index 5b803736a..9eabeca12 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ReachabilityFunctions.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ReachabilityFunctions.java @@ -26,6 +26,7 @@ public class ReachabilityFunctions implements IFlowFunctionMap { public final static VectorGenFlowFunction FLOW_REACHES = VectorGenFlowFunction.make(SparseIntSet.singleton(0)); public final static IUnaryFlowFunction KILL_FLOW = new IUnaryFlowFunction() { + @Override public SparseIntSet getTargets(int d1) { // kill even the reachability predicate 0. return new SparseIntSet(); @@ -46,19 +47,23 @@ public class ReachabilityFunctions implements IFlowFunctionMap { /* * @see com.ibm.wala.dataflow.IFDS.IFlowFunctionMap#getCallNoneToReturnFlowFunction(java.lang.Object, java.lang.Object) */ + @Override public IUnaryFlowFunction getCallNoneToReturnFlowFunction(T src, T dest) { return FLOW_REACHES; } + @Override public IUnaryFlowFunction getCallToReturnFlowFunction(T src, T dest) { // force flow into callee and back. return KILL_FLOW; } + @Override public IUnaryFlowFunction getNormalFlowFunction(T src, T dest) { return FLOW_REACHES; } + @Override public IFlowFunction getReturnFlowFunction(T call, T src, T dest) { return FLOW_REACHES; } @@ -67,6 +72,7 @@ public class ReachabilityFunctions implements IFlowFunctionMap { return FLOW_REACHES; } + @Override public IUnaryFlowFunction getCallFlowFunction(T src, T dest, T ret) { return FLOW_REACHES; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SDG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SDG.java index 6ad7b1e5a..9f6fdd8e9 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SDG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SDG.java @@ -199,6 +199,7 @@ public class SDG extends AbstractNumberedGraph implements ISDG { * iterate over the nodes without constructing any new ones. Use with extreme care. May break graph traversals that * lazily add more nodes. */ + @Override public Iterator iterateLazyNodes() { return nodeMgr.iterateLazyNodes(); } @@ -279,14 +280,17 @@ public class SDG extends AbstractNumberedGraph implements ISDG { } private class Edges implements NumberedEdgeManager { + @Override public void addEdge(Statement src, Statement dst) { Assertions.UNREACHABLE(); } + @Override public int getPredNodeCount(Statement N) { return IteratorUtil.count(getPredNodes(N)); } + @Override public Iterator getPredNodes(Statement N) { if (dOptions.isIgnoreExceptions()) { assert !N.getKind().equals(Kind.EXC_RET_CALLEE); @@ -441,10 +445,12 @@ public class SDG extends AbstractNumberedGraph implements ISDG { } } + @Override public int getSuccNodeCount(Statement N) { return IteratorUtil.count(getSuccNodes(N)); } + @Override public Iterator getSuccNodes(Statement N) { if (dOptions.isTerminateAtCast() && isUninformativeForReflection(N.getNode())) { return EmptyIterator.instance(); @@ -607,6 +613,7 @@ public class SDG extends AbstractNumberedGraph implements ISDG { return false; } + @Override public boolean hasEdge(Statement src, Statement dst) { addPDGStatementNodes(src.getNode()); addPDGStatementNodes(dst.getNode()); @@ -723,26 +730,31 @@ public class SDG extends AbstractNumberedGraph implements ISDG { } } + @Override public void removeAllIncidentEdges(Statement node) { Assertions.UNREACHABLE(); } + @Override public void removeEdge(Statement src, Statement dst) { Assertions.UNREACHABLE(); } + @Override public void removeIncomingEdges(Statement node) { Assertions.UNREACHABLE(); } + @Override public void removeOutgoingEdges(Statement node) { Assertions.UNREACHABLE(); } + @Override public IntSet getPredNodeNumbers(Statement node) { // TODO: optimize me. MutableSparseIntSet result = MutableSparseIntSet.makeEmpty(); @@ -753,6 +765,7 @@ public class SDG extends AbstractNumberedGraph implements ISDG { return result; } + @Override public IntSet getSuccNodeNumbers(Statement node) { // TODO: optimize me. MutableSparseIntSet result = MutableSparseIntSet.makeEmpty(); @@ -774,6 +787,7 @@ public class SDG extends AbstractNumberedGraph implements ISDG { return nodeMgr; } + @Override public PDG getPDG(CGNode node) { PDG result = pdgMap.get(node); if (result == null) { @@ -787,6 +801,7 @@ public class SDG extends AbstractNumberedGraph implements ISDG { return result; } + @Override public ControlDependenceOptions getCOptions() { return cOptions; } @@ -799,6 +814,7 @@ public class SDG extends AbstractNumberedGraph implements ISDG { return cg; } + @Override public IClassHierarchy getClassHierarchy() { return cg.getClassHierarchy(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SDGSupergraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SDGSupergraph.java index dc9ff6cb0..b4a94f77f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SDGSupergraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SDGSupergraph.java @@ -40,6 +40,7 @@ class SDGSupergraph implements ISupergraph { this.backward = backward; } + @Override public Graph getProcedureGraph() { Assertions.UNREACHABLE(); return null; @@ -53,6 +54,7 @@ class SDGSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#classifyEdge(java.lang.Object, java.lang.Object) */ + @Override public byte classifyEdge(Statement src, Statement dest) { Assertions.UNREACHABLE(); return 0; @@ -61,6 +63,7 @@ class SDGSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getCallSites(java.lang.Object) */ + @Override public Iterator getCallSites(Statement r, PDG callee) { switch (r.getKind()) { case EXC_RET_CALLER: { @@ -90,10 +93,12 @@ class SDGSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getCalledNodes(java.lang.Object) */ + @Override public Iterator getCalledNodes(Statement call) { switch (call.getKind()) { case NORMAL: Filter f = new Filter() { + @Override public boolean accepts(Object o) { Statement s = (Statement) o; return isEntry(s); @@ -112,6 +117,7 @@ class SDGSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getEntriesForProcedure(java.lang.Object) */ + @Override public Statement[] getEntriesForProcedure(PDG procedure) { Statement[] normal = procedure.getParamCalleeStatements(); Statement[] result = new Statement[normal.length + 1]; @@ -123,6 +129,7 @@ class SDGSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getExitsForProcedure(java.lang.Object) */ + @Override public Statement[] getExitsForProcedure(PDG procedure) { Statement[] normal = procedure.getReturnStatements(); Statement[] result = new Statement[normal.length + 1]; @@ -134,6 +141,7 @@ class SDGSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getLocalBlock(java.lang.Object, int) */ + @Override public Statement getLocalBlock(PDG procedure, int i) { return procedure.getNode(i); } @@ -141,6 +149,7 @@ class SDGSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getLocalBlockNumber(java.lang.Object) */ + @Override public int getLocalBlockNumber(Statement n) { PDG pdg = getProcOf(n); return pdg.getNumber(n); @@ -149,6 +158,7 @@ class SDGSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getNormalSuccessors(java.lang.Object) */ + @Override public Iterator getNormalSuccessors(Statement call) { if (!backward) { return EmptyIterator.instance(); @@ -161,6 +171,7 @@ class SDGSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getNumberOfBlocks(java.lang.Object) */ + @Override public int getNumberOfBlocks(PDG procedure) { Assertions.UNREACHABLE(); return 0; @@ -169,6 +180,7 @@ class SDGSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getProcOf(java.lang.Object) */ + @Override public PDG getProcOf(Statement n) { CGNode node = n.getNode(); PDG result = sdg.getPDG(node); @@ -181,6 +193,7 @@ class SDGSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getReturnSites(java.lang.Object) */ + @Override public Iterator getReturnSites(Statement call, PDG callee) { switch (call.getKind()) { case PARAM_CALLER: { @@ -210,6 +223,7 @@ class SDGSupergraph implements ISupergraph { /* * @see com.ibm.wala.dataflow.IFDS.ISupergraph#isCall(java.lang.Object) */ + @Override public boolean isCall(Statement n) { switch (n.getKind()) { case EXC_RET_CALLEE: @@ -242,6 +256,7 @@ class SDGSupergraph implements ISupergraph { } } + @Override public boolean isEntry(Statement n) { switch (n.getKind()) { case PARAM_CALLEE: @@ -267,6 +282,7 @@ class SDGSupergraph implements ISupergraph { } } + @Override public boolean isExit(Statement n) { switch (n.getKind()) { case PARAM_CALLEE: @@ -293,6 +309,7 @@ class SDGSupergraph implements ISupergraph { } } + @Override public boolean isReturn(Statement n) { switch (n.getKind()) { case EXC_RET_CALLER: @@ -318,98 +335,119 @@ class SDGSupergraph implements ISupergraph { } } + @Override public void removeNodeAndEdges(Statement N) { Assertions.UNREACHABLE(); } + @Override public void addNode(Statement n) { Assertions.UNREACHABLE(); } + @Override public boolean containsNode(Statement N) { return sdg.containsNode(N); } + @Override public int getNumberOfNodes() { Assertions.UNREACHABLE(); return 0; } + @Override public Iterator iterator() { return sdg.iterator(); } + @Override public void removeNode(Statement n) { Assertions.UNREACHABLE(); } + @Override public void addEdge(Statement src, Statement dst) { Assertions.UNREACHABLE(); } + @Override public int getPredNodeCount(Statement N) { Assertions.UNREACHABLE(); return 0; } + @Override public Iterator getPredNodes(Statement N) { return sdg.getPredNodes(N); } + @Override public int getSuccNodeCount(Statement N) { Assertions.UNREACHABLE(); return 0; } + @Override public Iterator getSuccNodes(Statement N) { return sdg.getSuccNodes(N); } + @Override public boolean hasEdge(Statement src, Statement dst) { return sdg.hasEdge(src, dst); } + @Override public void removeAllIncidentEdges(Statement node) { Assertions.UNREACHABLE(); } + @Override public void removeEdge(Statement src, Statement dst) { Assertions.UNREACHABLE(); } + @Override public void removeIncomingEdges(Statement node) { Assertions.UNREACHABLE(); } + @Override public void removeOutgoingEdges(Statement node) { Assertions.UNREACHABLE(); } + @Override public int getMaxNumber() { return sdg.getMaxNumber(); } + @Override public Statement getNode(int number) { return sdg.getNode(number); } + @Override public int getNumber(Statement N) { return sdg.getNumber(N); } + @Override public Iterator iterateNodes(IntSet s) { Assertions.UNREACHABLE(); return null; } + @Override public IntSet getPredNodeNumbers(Statement node) { return sdg.getPredNodeNumbers(node); } @@ -417,6 +455,7 @@ class SDGSupergraph implements ISupergraph { /* * @see com.ibm.wala.util.graph.NumberedEdgeManager#getSuccNodeNumbers(java.lang.Object) */ + @Override public IntSet getSuccNodeNumbers(Statement node) { return sdg.getSuccNodeNumbers(node); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SliceFunctions.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SliceFunctions.java index 104fcd28d..e480ebc83 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SliceFunctions.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SliceFunctions.java @@ -21,10 +21,12 @@ import com.ibm.wala.util.debug.Assertions; */ public class SliceFunctions implements IPartiallyBalancedFlowFunctions { + @Override public IUnaryFlowFunction getCallFlowFunction(Statement src, Statement dest, Statement ret) { return ReachabilityFunctions.createReachabilityFunctions().getCallFlowFunction(src, dest, ret); } + @Override public IUnaryFlowFunction getCallNoneToReturnFlowFunction(Statement src, Statement dest) { if (src == null) { throw new IllegalArgumentException("src is null"); @@ -61,14 +63,17 @@ public class SliceFunctions implements IPartiallyBalancedFlowFunctions getDomain() { // a dummy return new UnorderedDomain(); @@ -263,6 +264,7 @@ public class Slicer { /* * @see com.ibm.wala.dataflow.IFDS.TabulationProblem#getFunctionMap() */ + @Override public IPartiallyBalancedFlowFunctions getFunctionMap() { return f; } @@ -270,6 +272,7 @@ public class Slicer { /* * @see com.ibm.wala.dataflow.IFDS.TabulationProblem#getMergeFunction() */ + @Override public IMergeFunction getMergeFunction() { return null; } @@ -277,10 +280,12 @@ public class Slicer { /* * @see com.ibm.wala.dataflow.IFDS.TabulationProblem#getSupergraph() */ + @Override public ISupergraph getSupergraph() { return supergraph; } + @Override public Collection> initialSeeds() { if (backward) { Collection> result = HashSetFactory.make(); @@ -299,6 +304,7 @@ public class Slicer { } } + @Override public Statement getFakeEntry(Statement node) { return backward ? new MethodExitStatement(node.getNode()) : new MethodEntryStatement(node.getNode()); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/thin/CISDG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/thin/CISDG.java index 574689098..cbfe20899 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/thin/CISDG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/thin/CISDG.java @@ -71,16 +71,19 @@ public class CISDG implements ISDG { invRef = MapUtil.inverseMap(ref); } + @Override public void addEdge(Statement src, Statement dst) { Assertions.UNREACHABLE(); noHeap.addEdge(src, dst); } + @Override public void addNode(Statement n) { Assertions.UNREACHABLE(); noHeap.addNode(n); } + @Override public boolean containsNode(Statement N) { return noHeap.containsNode(N); } @@ -91,42 +94,51 @@ public class CISDG implements ISDG { return noHeap.equals(obj); } + @Override public ControlDependenceOptions getCOptions() { Assertions.UNREACHABLE(); return noHeap.getCOptions(); } + @Override public int getMaxNumber() { return noHeap.getMaxNumber(); } + @Override public Statement getNode(int number) { Assertions.UNREACHABLE(); return noHeap.getNode(number); } + @Override public int getNumber(Statement N) { return noHeap.getNumber(N); } + @Override public int getNumberOfNodes() { return noHeap.getNumberOfNodes(); } + @Override public PDG getPDG(CGNode node) { Assertions.UNREACHABLE(); return noHeap.getPDG(node); } + @Override public int getPredNodeCount(Statement N) { return IteratorUtil.count(getPredNodes(N)); } + @Override public IntSet getPredNodeNumbers(Statement node) { Assertions.UNREACHABLE(); return noHeap.getPredNodeNumbers(node); } + @Override public Iterator getPredNodes(Statement N) { if (DEBUG) { System.err.println("getPredNodes " + N); @@ -145,15 +157,18 @@ public class CISDG implements ISDG { } } + @Override public int getSuccNodeCount(Statement N) { return IteratorUtil.count(getSuccNodes(N)); } + @Override public IntSet getSuccNodeNumbers(Statement node) { Assertions.UNREACHABLE(); return noHeap.getSuccNodeNumbers(node); } + @Override public Iterator getSuccNodes(Statement N) { if (DEBUG) { System.err.println("getSuccNodes " + N); @@ -172,6 +187,7 @@ public class CISDG implements ISDG { } } + @Override public boolean hasEdge(Statement src, Statement dst) { Assertions.UNREACHABLE(); return noHeap.hasEdge(src, dst); @@ -184,45 +200,54 @@ public class CISDG implements ISDG { } + @Override public Iterator iterateLazyNodes() { Assertions.UNREACHABLE(); return noHeap.iterateLazyNodes(); } + @Override public Iterator iterator() { return noHeap.iterator(); } + @Override public Iterator iterateNodes(IntSet s) { Assertions.UNREACHABLE(); return noHeap.iterateNodes(s); } + @Override public void removeAllIncidentEdges(Statement node) { Assertions.UNREACHABLE(); noHeap.removeAllIncidentEdges(node); } + @Override public void removeEdge(Statement src, Statement dst) { Assertions.UNREACHABLE(); noHeap.removeEdge(src, dst); } + @Override public void removeIncomingEdges(Statement node) { Assertions.UNREACHABLE(); noHeap.removeIncomingEdges(node); } + @Override public void removeNode(Statement n) { Assertions.UNREACHABLE(); noHeap.removeNode(n); } + @Override public void removeNodeAndEdges(Statement N) { Assertions.UNREACHABLE(); noHeap.removeNodeAndEdges(N); } + @Override public void removeOutgoingEdges(Statement node) { Assertions.UNREACHABLE(); noHeap.removeOutgoingEdges(node); @@ -234,6 +259,7 @@ public class CISDG implements ISDG { return noHeap.toString(); } + @Override public IClassHierarchy getClassHierarchy() { return noHeap.getClassHierarchy(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassClassTargetSelector.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassClassTargetSelector.java index 2924aab92..f679c07b5 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassClassTargetSelector.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassClassTargetSelector.java @@ -66,6 +66,7 @@ public class BypassClassTargetSelector implements ClassTargetSelector { * @see com.ibm.wala.ipa.callgraph.ClassTargetSelector#getAllocatedTarget(com.ibm.wala.ipa.callgraph.CGNode, * com.ibm.wala.classLoader.NewSiteReference) */ + @Override public IClass getAllocatedTarget(CGNode caller, NewSiteReference site) { if (site == null) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassMethodTargetSelector.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassMethodTargetSelector.java index 1cd466b76..21d6b0a9f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassMethodTargetSelector.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassMethodTargetSelector.java @@ -100,6 +100,7 @@ public class BypassMethodTargetSelector implements MethodTargetSelector { * * @throws IllegalArgumentException if site is null */ + @Override public IMethod getCalleeTarget(CGNode caller, CallSiteReference site, IClass dispatchType) { if (site == null) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassSyntheticClass.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassSyntheticClass.java index 2b6d121c8..67f4ee0cd 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassSyntheticClass.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassSyntheticClass.java @@ -73,6 +73,7 @@ public class BypassSyntheticClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getSuperclass() */ + @Override public IClass getSuperclass() { if (realType.isInterface()) { IClass result = loader.lookupClass(TypeReference.JavaLangObject.getName()); @@ -88,6 +89,7 @@ public class BypassSyntheticClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getAllInterfaces() */ + @Override public Collection getAllImplementedInterfaces() { Collection realIfaces = realType.getAllImplementedInterfaces(); if (realType.isInterface()) { @@ -102,6 +104,7 @@ public class BypassSyntheticClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getMethod(com.ibm.wala.classLoader.Selector) */ + @Override public IMethod getMethod(Selector selector) { return realType.getMethod(selector); } @@ -109,6 +112,7 @@ public class BypassSyntheticClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getMethod(com.ibm.wala.classLoader.Selector) */ + @Override public IField getField(Atom name) { return realType.getField(name); } @@ -124,6 +128,7 @@ public class BypassSyntheticClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getClassInitializer() */ + @Override public IMethod getClassInitializer() { return null; } @@ -131,6 +136,7 @@ public class BypassSyntheticClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getDeclaredMethods() */ + @Override public Collection getDeclaredMethods() { return realType.getDeclaredMethods(); } @@ -138,6 +144,7 @@ public class BypassSyntheticClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getDeclaredInstanceFields() */ + @Override public Collection getDeclaredInstanceFields() { return realType.getDeclaredInstanceFields(); } @@ -145,6 +152,7 @@ public class BypassSyntheticClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getDeclaredStaticFields() */ + @Override public Collection getDeclaredStaticFields() { return realType.getDeclaredStaticFields(); } @@ -185,6 +193,7 @@ public class BypassSyntheticClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getModifiers() */ + @Override public int getModifiers() throws UnimplementedError { Assertions.UNREACHABLE(); return 0; @@ -193,6 +202,7 @@ public class BypassSyntheticClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#isReferenceType() */ + @Override public boolean isReferenceType() { return getReference().isReferenceType(); } @@ -200,6 +210,7 @@ public class BypassSyntheticClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getDirectInterfaces() */ + @Override public Collection getDirectInterfaces() throws UnimplementedError { Assertions.UNREACHABLE(); return null; @@ -208,6 +219,7 @@ public class BypassSyntheticClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getAllInstanceFields() */ + @Override public Collection getAllInstanceFields() { return realType.getAllInstanceFields(); } @@ -215,6 +227,7 @@ public class BypassSyntheticClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getAllStaticFields() */ + @Override public Collection getAllStaticFields(){ return realType.getAllStaticFields(); } @@ -222,6 +235,7 @@ public class BypassSyntheticClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getAllMethods() */ + @Override public Collection getAllMethods() { return realType.getAllMethods(); } @@ -229,14 +243,17 @@ public class BypassSyntheticClass extends SyntheticClass { /* * @see com.ibm.wala.classLoader.IClass#getAllFields() */ + @Override public Collection getAllFields() { return realType.getAllFields(); } + @Override public boolean isPublic() { return realType.isPublic(); } + @Override public boolean isPrivate() { return realType.isPrivate(); } @@ -246,6 +263,7 @@ public class BypassSyntheticClass extends SyntheticClass { return null; } + @Override public Collection getAnnotations() { return Collections.emptySet(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassSyntheticClassLoader.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassSyntheticClassLoader.java index 73b4ebab3..10a9918e7 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassSyntheticClassLoader.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassSyntheticClassLoader.java @@ -91,6 +91,7 @@ public class BypassSyntheticClassLoader implements IClassLoader { return me.getName().toString(); } + @Override public IClass lookupClass(TypeName className) { IClass pc = parent.lookupClass(className); if (pc == null) { @@ -112,6 +113,7 @@ public class BypassSyntheticClassLoader implements IClassLoader { /** * Return the ClassLoaderReference for this class loader. */ + @Override public ClassLoaderReference getReference() { return me; } @@ -119,6 +121,7 @@ public class BypassSyntheticClassLoader implements IClassLoader { /** * @return an Iterator of all classes loaded by this loader */ + @Override public Iterator iterateAllClasses() { return syntheticClasses.values().iterator(); } @@ -126,6 +129,7 @@ public class BypassSyntheticClassLoader implements IClassLoader { /** * @return the number of classes in scope to be loaded by this loader */ + @Override public int getNumberOfClasses() { return syntheticClasses.size(); } @@ -133,6 +137,7 @@ public class BypassSyntheticClassLoader implements IClassLoader { /** * @return the unique name that identifies this class loader. */ + @Override public Atom getName() { return me.getName(); } @@ -141,6 +146,7 @@ public class BypassSyntheticClassLoader implements IClassLoader { * @return the unique name that identifies the programming language * from which this class loader loads code. */ + @Override public Language getLanguage() { return Language.JAVA; } @@ -148,6 +154,7 @@ public class BypassSyntheticClassLoader implements IClassLoader { /* * @see com.ibm.wala.classLoader.IClassLoader#getNumberOfMethods() */ + @Override public int getNumberOfMethods() { // TODO Auto-generated method stub return 0; @@ -156,6 +163,7 @@ public class BypassSyntheticClassLoader implements IClassLoader { /* * @see com.ibm.wala.classLoader.IClassLoader#getSourceFileName(com.ibm.wala.classLoader.IClass) */ + @Override public String getSourceFileName(IClass klass) { return null; } @@ -163,16 +171,19 @@ public class BypassSyntheticClassLoader implements IClassLoader { /** * @see com.ibm.wala.classLoader.IClassLoader#getParent() */ + @Override public IClassLoader getParent() { return parent; } + @Override public void init(List modules) throws IOException { } /* * @see com.ibm.wala.classLoader.IClassLoader#removeAll(java.util.Collection) */ + @Override public void removeAll(Collection toRemove) { if (toRemove == null) { throw new IllegalArgumentException("toRemove is null"); @@ -183,18 +194,22 @@ public class BypassSyntheticClassLoader implements IClassLoader { } } + @Override public InputStream getSource(IClass klass) { return null; } + @Override public SSAInstructionFactory getInstructionFactory() { return getLanguage().instructionFactory(); } + @Override public InputStream getSource(IMethod method, int offset) { return null; } + @Override public String getSourceFileName(IMethod method, int offset) { return null; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/SyntheticIRFactory.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/SyntheticIRFactory.java index a67114b8d..e339127c4 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/SyntheticIRFactory.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/SyntheticIRFactory.java @@ -26,6 +26,7 @@ public class SyntheticIRFactory implements IRFactory { return method.makeControlFlowGraph(method.getStatements()); } + @Override public IR makeIR(SyntheticMethod method, Context C, SSAOptions options) { if (method == null) { throw new IllegalArgumentException("method is null"); @@ -33,6 +34,7 @@ public class SyntheticIRFactory implements IRFactory { return method.makeIR(C, options); } + @Override public boolean contextIsIrrelevant(SyntheticMethod method) { // conservatively return false .. the context might matter. return false; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/CompoundPiPolicy.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/CompoundPiPolicy.java index cd9fa478f..5d3b7abe2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/CompoundPiPolicy.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/CompoundPiPolicy.java @@ -46,6 +46,7 @@ public class CompoundPiPolicy implements SSAPiNodePolicy { /* * @see com.ibm.wala.ssa.SSAPiNodePolicy#getPi(com.ibm.wala.ssa.SSAConditionalBranchInstruction, com.ibm.wala.ssa.SSAInstruction, com.ibm.wala.ssa.SSAInstruction, com.ibm.wala.ssa.SymbolTable) */ + @Override public Pair getPi(SSAConditionalBranchInstruction cond, SSAInstruction def1, SSAInstruction def2, SymbolTable symbolTable) { Pair result = p1.getPi(cond, def1, def2, symbolTable); @@ -59,6 +60,7 @@ public class CompoundPiPolicy implements SSAPiNodePolicy { /* * @see com.ibm.wala.ssa.SSAPiNodePolicy#getPi(com.ibm.wala.ssa.SSAAbstractInvokeInstruction, com.ibm.wala.ssa.SymbolTable) */ + @Override public Pair getPi(SSAAbstractInvokeInstruction call, SymbolTable symbolTable) { Pair result = p1.getPi(call, symbolTable); if (result != null) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/ConstantValue.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/ConstantValue.java index 84cecfefd..f6f3c4c28 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/ConstantValue.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/ConstantValue.java @@ -44,6 +44,7 @@ public class ConstantValue implements Value { /* * @see com.ibm.wala.ssa.Value#isStringConstant() */ + @Override public boolean isStringConstant() { return constant instanceof String; } @@ -73,6 +74,7 @@ public class ConstantValue implements Value { /** * @return true iff this constant is "null" */ + @Override public boolean isNullConstant() { return (constant == null); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/DefUse.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/DefUse.java index 330ad57ba..8b5495aff 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/DefUse.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/DefUse.java @@ -163,14 +163,17 @@ public class DefUse { it = uses.intIterator(); } + @Override public boolean hasNext() { return it.hasNext(); } + @Override public SSAInstruction next() { return allInstructions.get(it.next()); } + @Override public void remove() { Assertions.UNREACHABLE(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/DefaultIRFactory.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/DefaultIRFactory.java index 6393f59c5..e7f6b640b 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/DefaultIRFactory.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/DefaultIRFactory.java @@ -53,6 +53,7 @@ public class DefaultIRFactory implements IRFactory { * @see com.ibm.wala.ssa.IRFactory#makeIR(com.ibm.wala.classLoader.IMethod, com.ibm.wala.ipa.callgraph.Context, * com.ibm.wala.ipa.cha.IClassHierarchy, com.ibm.wala.ssa.SSAOptions, com.ibm.wala.util.warnings.WarningSet) */ + @Override public IR makeIR(IMethod method, Context c, SSAOptions options) throws IllegalArgumentException { if (method == null) { throw new IllegalArgumentException("method cannot be null"); @@ -70,6 +71,7 @@ public class DefaultIRFactory implements IRFactory { /** * Is the {@link Context} irrelevant as to structure of the {@link IR} for a particular {@link IMethod}? */ + @Override public boolean contextIsIrrelevant(IMethod method) { if (method == null) { throw new IllegalArgumentException("null method"); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/IR.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/IR.java index df8480222..da9bbd008 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/IR.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/IR.java @@ -313,10 +313,12 @@ public abstract class IR { } } + @Override public boolean hasNext() { return currentBlockIndex != -1; } + @Override public SSAInstruction next() { SSAInstruction result = currentBlockIterator.next(); if (!currentBlockIterator.hasNext()) { @@ -325,6 +327,7 @@ public abstract class IR { return result; } + @Override public void remove() { Assertions.UNREACHABLE(); } @@ -405,10 +408,12 @@ public abstract class IR { } } + @Override public boolean hasNext() { return currentBlockIndex != -1; } + @Override public SSAInstruction next() { ExceptionHandlerBasicBlock bb = (ExceptionHandlerBasicBlock) cfg.getNode(currentBlockIndex); SSAInstruction result = bb.getCatchInstruction(); @@ -416,6 +421,7 @@ public abstract class IR { return result; } + @Override public void remove() { Assertions.UNREACHABLE(); } @@ -475,14 +481,17 @@ public abstract class IR { nextIndex = -1; } + @Override public boolean hasNext() { return nextIndex != -1; } + @Override public void remove() { Assertions.UNREACHABLE(); } + @Override public SSAInstruction next() { SSAInstruction result = instructions[nextIndex]; advanceIndex(nextIndex + 1); @@ -591,16 +600,19 @@ public abstract class IR { ; } + @Override public boolean hasNext() { return i <= limit; } + @Override public CallSiteReference next() { int index = callSiteMapping.getRelated(i).max(); advance(); return ((SSAAbstractInvokeInstruction) instructions[index]).getCallSite(); } + @Override public void remove() { throw new UnsupportedOperationException(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/ISSABasicBlock.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/ISSABasicBlock.java index 4c6aee79a..57a583b61 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/ISSABasicBlock.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/ISSABasicBlock.java @@ -24,16 +24,19 @@ public interface ISSABasicBlock extends IBasicBlock { /** * Is this block a catch block */ + @Override public boolean isCatchBlock(); /** * Does this block represent the unique exit from a {@link ControlFlowGraph}? */ + @Override public boolean isExitBlock(); /** * Does this block represent the unique entry to a {@link ControlFlowGraph} */ + @Override public boolean isEntryBlock(); /** diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/InstanceOfPiPolicy.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/InstanceOfPiPolicy.java index 959e87abe..1f7b35eec 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/InstanceOfPiPolicy.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/InstanceOfPiPolicy.java @@ -41,6 +41,7 @@ public class InstanceOfPiPolicy implements SSAPiNodePolicy { * @see com.ibm.wala.ssa.SSAPiNodePolicy#getPi(com.ibm.wala.ssa.SSAConditionalBranchInstruction, com.ibm.wala.ssa.SSAInstruction, * com.ibm.wala.ssa.SSAInstruction, com.ibm.wala.ssa.SymbolTable) */ + @Override public Pair getPi(SSAConditionalBranchInstruction cond, SSAInstruction def1, SSAInstruction def2, SymbolTable symbolTable) { if (def1 instanceof SSAInstanceofInstruction) { @@ -69,6 +70,7 @@ public class InstanceOfPiPolicy implements SSAPiNodePolicy { /* * @see com.ibm.wala.ssa.SSAPiNodePolicy#getPi(com.ibm.wala.ssa.SSAAbstractInvokeInstruction, com.ibm.wala.ssa.SymbolTable) */ + @Override public Pair getPi(SSAAbstractInvokeInstruction call, SymbolTable symbolTable) { return null; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/NullTestPiPolicy.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/NullTestPiPolicy.java index 38b570f17..60e1eca0c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/NullTestPiPolicy.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/NullTestPiPolicy.java @@ -35,6 +35,7 @@ public class NullTestPiPolicy implements SSAPiNodePolicy { * @see com.ibm.wala.ssa.SSAPiNodePolicy#getPi(com.ibm.wala.ssa.SSAConditionalBranchInstruction, * com.ibm.wala.ssa.SSAInstruction, com.ibm.wala.ssa.SSAInstruction, com.ibm.wala.ssa.SymbolTable) */ + @Override public Pair getPi(SSAConditionalBranchInstruction cond, SSAInstruction def1, SSAInstruction def2, SymbolTable symbolTable) { if (symbolTable == null) { @@ -52,6 +53,7 @@ public class NullTestPiPolicy implements SSAPiNodePolicy { return null; } + @Override public Pair getPi(SSAAbstractInvokeInstruction call, SymbolTable symbolTable) { return null; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/PhiValue.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/PhiValue.java index 2ea647585..72dc3b106 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/PhiValue.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/PhiValue.java @@ -44,6 +44,7 @@ class PhiValue implements Value { /* * @see com.ibm.wala.ssa.Value#isStringConstant() */ + @Override public boolean isStringConstant() { return false; } @@ -51,6 +52,7 @@ class PhiValue implements Value { /* * @see com.ibm.wala.ssa.Value#isNullConstant() */ + @Override public boolean isNullConstant() { return false; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSABuilder.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSABuilder.java index eee4eda48..409ea9d54 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSABuilder.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSABuilder.java @@ -131,6 +131,7 @@ public class SSABuilder extends AbstractIntStackMachine { this.shrikeCFG = shrikeCFG; } + @Override public int meetStack(int slot, int[] rhs, BasicBlock bb) { assert bb != null : "null basic block"; @@ -171,6 +172,7 @@ public class SSABuilder extends AbstractIntStackMachine { /** * @see com.ibm.wala.analysis.stackMachine.AbstractIntStackMachine.Meeter#meetLocal(int, int[], BasicBlock) */ + @Override public int meetLocal(int n, int[] rhs, BasicBlock bb) { if (allTheSame(rhs)) { for (int i = 0; i < rhs.length; i++) { @@ -232,6 +234,7 @@ public class SSABuilder extends AbstractIntStackMachine { /** * @see com.ibm.wala.analysis.stackMachine.AbstractIntStackMachine.Meeter#meetStackAtCatchBlock(BasicBlock) */ + @Override public int meetStackAtCatchBlock(BasicBlock bb) { int bbNumber = shrikeCFG.getNumber(bb); SSACFG.ExceptionHandlerBasicBlock newBB = (SSACFG.ExceptionHandlerBasicBlock) cfg.getNode(bbNumber); @@ -967,6 +970,7 @@ public class SSABuilder extends AbstractIntStackMachine { * @param index - index into IR instruction array * @param vn - value number */ + @Override public String[] getLocalNames(int index, int vn) { try { if (!shrikeCFG.getMethod().hasLocalVariableTable()) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java index 62ae97878..633a318c4 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java @@ -206,6 +206,7 @@ public class SSACFG implements ControlFlowGraph * Get the basic block an instruction belongs to. Note: the instruction2Block array is filled in lazily. During initialization, * the mapping is set up only for the first instruction of each basic block. */ + @Override public SSACFG.BasicBlock getBlockForInstruction(int instructionIndex) { IBasicBlock N = delegate.getBlockForInstruction(instructionIndex); int number = delegate.getNumber(N); @@ -219,6 +220,7 @@ public class SSACFG implements ControlFlowGraph * * @return an array containing the SSA instructions. */ + @Override public SSAInstruction[] getInstructions() { return instructions; } @@ -272,6 +274,7 @@ public class SSACFG implements ControlFlowGraph this.number = number; } + @Override public int getNumber() { return number; } @@ -279,6 +282,7 @@ public class SSACFG implements ControlFlowGraph /** * Method getFirstInstructionIndex. */ + @Override public int getFirstInstructionIndex() { IBasicBlock B = delegate.getNode(number); return B.getFirstInstructionIndex(); @@ -287,10 +291,12 @@ public class SSACFG implements ControlFlowGraph /** * Is this block marked as a catch block? */ + @Override public boolean isCatchBlock() { return delegate.getCatchBlocks().get(getNumber()); } + @Override public int getLastInstructionIndex() { IBasicBlock B = delegate.getNode(number); return B.getLastInstructionIndex(); @@ -299,6 +305,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.ssa.ISSABasicBlock#iteratePhis() */ + @Override public Iterator iteratePhis() { compressPhis(); if (stackSlotPhis == null) { @@ -459,6 +466,7 @@ public class SSACFG implements ControlFlowGraph blockPiInstructions.add(pi); } + @Override public Iterator iteratePis() { return blockPiInstructions.iterator(); } @@ -474,10 +482,12 @@ public class SSACFG implements ControlFlowGraph return new Iterator() { private int start = dummy; + @Override public boolean hasNext() { return (start <= end); } + @Override public SSAInstruction next() { SSAInstruction i = instructions[start]; start++; @@ -487,6 +497,7 @@ public class SSACFG implements ControlFlowGraph return i; } + @Override public void remove() { throw new UnsupportedOperationException(); } @@ -563,6 +574,7 @@ public class SSACFG implements ControlFlowGraph return result; } + @Override public Iterator iterator() { return getAllInstructions().iterator(); } @@ -577,6 +589,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.util.graph.INodeWithNumber#getGraphNodeId() */ + @Override public int getGraphNodeId() { return number; } @@ -584,6 +597,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.util.graph.INodeWithNumber#setGraphNodeId(int) */ + @Override public void setGraphNodeId(int number) { // TODO Auto-generated method stub } @@ -619,6 +633,7 @@ public class SSACFG implements ControlFlowGraph } } + @Override public IMethod getMethod() { return method; } @@ -631,6 +646,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.cfg.IBasicBlock#isExitBlock() */ + @Override public boolean isExitBlock() { return this == SSACFG.this.exit(); } @@ -638,10 +654,12 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.cfg.IBasicBlock#isEntryBlock() */ + @Override public boolean isEntryBlock() { return this == SSACFG.this.entry(); } + @Override public SSAInstruction getLastInstruction() { return instructions[getLastInstructionIndex()]; } @@ -651,6 +669,7 @@ public class SSACFG implements ControlFlowGraph * * @see com.ibm.wala.ssa.ISSABasicBlock#getCaughtExceptionTypes() */ + @Override public Iterator getCaughtExceptionTypes() { return EmptyIterator.instance(); } @@ -689,14 +708,17 @@ public class SSACFG implements ControlFlowGraph return new Iterator() { int next = 0; + @Override public boolean hasNext() { return next < nExceptionTypes; } + @Override public TypeReference next() { return exceptionTypes[next++]; } + @Override public void remove() { Assertions.UNREACHABLE(); } @@ -752,6 +774,7 @@ public class SSACFG implements ControlFlowGraph return s.toString(); } + @Override public BitVector getCatchBlocks() { return delegate.getCatchBlocks(); } @@ -768,6 +791,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.cfg.ControlFlowGraph#entry() */ + @Override public SSACFG.BasicBlock entry() { return basicBlocks[0]; } @@ -775,6 +799,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.cfg.ControlFlowGraph#exit() */ + @Override public SSACFG.BasicBlock exit() { return exit; } @@ -782,6 +807,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.util.graph.NumberedGraph#getNumber(com.ibm.wala.util.graph.Node) */ + @Override public int getNumber(ISSABasicBlock b) throws IllegalArgumentException { if (b == null) { throw new IllegalArgumentException("N == null"); @@ -792,6 +818,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.util.graph.NumberedGraph#getNode(int) */ + @Override public BasicBlock getNode(int number) { return basicBlocks[number]; } @@ -799,6 +826,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.util.graph.NumberedGraph#getMaxNumber() */ + @Override public int getMaxNumber() { return basicBlocks.length - 1; } @@ -806,6 +834,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.util.graph.Graph#iterateNodes() */ + @Override public Iterator iterator() { ArrayList list = new ArrayList(); for (BasicBlock b : basicBlocks) { @@ -817,6 +846,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.util.graph.Graph#getNumberOfNodes() */ + @Override public int getNumberOfNodes() { return delegate.getNumberOfNodes(); } @@ -824,6 +854,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.util.graph.Graph#getPredNodes(com.ibm.wala.util.graph.Node) */ + @Override public Iterator getPredNodes(ISSABasicBlock b) throws IllegalArgumentException { if (b == null) { throw new IllegalArgumentException("b == null"); @@ -831,16 +862,19 @@ public class SSACFG implements ControlFlowGraph IBasicBlock n = delegate.getNode(b.getNumber()); final Iterator i = delegate.getPredNodes(n); return new Iterator() { + @Override public boolean hasNext() { return i.hasNext(); } + @Override public BasicBlock next() { IBasicBlock n = (IBasicBlock) i.next(); int number = n.getNumber(); return basicBlocks[number]; } + @Override public void remove() { Assertions.UNREACHABLE(); } @@ -850,6 +884,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.util.graph.Graph#getPredNodeCount(com.ibm.wala.util.graph.Node) */ + @Override public int getPredNodeCount(ISSABasicBlock b) throws IllegalArgumentException { if (b == null) { throw new IllegalArgumentException("b == null"); @@ -861,6 +896,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.util.graph.Graph#getSuccNodes(com.ibm.wala.util.graph.Node) */ + @Override public Iterator getSuccNodes(ISSABasicBlock b) throws IllegalArgumentException { if (b == null) { throw new IllegalArgumentException("b == null"); @@ -868,16 +904,19 @@ public class SSACFG implements ControlFlowGraph IBasicBlock n = delegate.getNode(b.getNumber()); final Iterator i = delegate.getSuccNodes(n); return new Iterator() { + @Override public boolean hasNext() { return i.hasNext(); } + @Override public ISSABasicBlock next() { IBasicBlock n = (IBasicBlock) i.next(); int number = n.getNumber(); return basicBlocks[number]; } + @Override public void remove() { Assertions.UNREACHABLE(); } @@ -887,6 +926,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.util.graph.Graph#getSuccNodeCount(com.ibm.wala.util.graph.Node) */ + @Override public int getSuccNodeCount(ISSABasicBlock b) throws IllegalArgumentException { if (b == null) { throw new IllegalArgumentException("b == null"); @@ -898,14 +938,17 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.util.graph.NumberedGraph#addNode(com.ibm.wala.util.graph.Node) */ + @Override public void addNode(ISSABasicBlock n) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } + @Override public void addEdge(ISSABasicBlock src, ISSABasicBlock dst) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } + @Override public void removeEdge(ISSABasicBlock src, ISSABasicBlock dst) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } @@ -913,6 +956,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.util.graph.EdgeManager#removeEdges(com.ibm.wala.util.graph.Node) */ + @Override public void removeAllIncidentEdges(ISSABasicBlock node) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } @@ -920,6 +964,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.util.graph.Graph#removeNode(com.ibm.wala.util.graph.Node) */ + @Override public void removeNodeAndEdges(ISSABasicBlock N) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } @@ -927,6 +972,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.util.graph.NodeManager#remove(com.ibm.wala.util.graph.Node) */ + @Override public void removeNode(ISSABasicBlock n) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } @@ -934,6 +980,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.cfg.ControlFlowGraph#getProgramCounter(int) */ + @Override public int getProgramCounter(int index) { // delegate to incoming cfg. return delegate.getProgramCounter(index); @@ -942,6 +989,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.util.graph.Graph#containsNode(com.ibm.wala.util.graph.Node) */ + @Override public boolean containsNode(ISSABasicBlock N) { if (N instanceof BasicBlock) { return basicBlocks[getNumber(N)] == N; @@ -953,6 +1001,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.cfg.ControlFlowGraph#getMethod() */ + @Override public IMethod getMethod() { return method; } @@ -960,6 +1009,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.cfg.ControlFlowGraph#getExceptionalSuccessors(com.ibm.wala.cfg.IBasicBlock) */ + @Override public List getExceptionalSuccessors(final ISSABasicBlock b) { if (b == null) { throw new IllegalArgumentException("b is null"); @@ -977,12 +1027,14 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.cfg.ControlFlowGraph#getExceptionalSuccessors(com.ibm.wala.cfg.IBasicBlock) */ + @Override public Collection getExceptionalPredecessors(ISSABasicBlock b) { if (b == null) { throw new IllegalArgumentException("b is null"); } IBasicBlock n = delegate.getNode(b.getNumber()); Function, ISSABasicBlock> f = new Function, ISSABasicBlock>() { + @Override public ISSABasicBlock apply(IBasicBlock object) { return basicBlocks[delegate.getNumber(object)]; } @@ -1030,6 +1082,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.cfg.ControlFlowGraph#getNormalSuccessors(com.ibm.wala.cfg.IBasicBlock) */ + @Override public Collection getNormalSuccessors(ISSABasicBlock b) { if (b == null) { throw new IllegalArgumentException("b is null"); @@ -1047,6 +1100,7 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.cfg.ControlFlowGraph#getNormalSuccessors(com.ibm.wala.cfg.IBasicBlock) */ + @Override public Collection getNormalPredecessors(ISSABasicBlock b) { if (b == null) { throw new IllegalArgumentException("b is null"); @@ -1064,22 +1118,27 @@ public class SSACFG implements ControlFlowGraph /* * @see com.ibm.wala.util.graph.NumberedNodeManager#iterateNodes(com.ibm.wala.util.intset.IntSet) */ + @Override public Iterator iterateNodes(IntSet s) { return new NumberedNodeIterator(s, this); } + @Override public void removeIncomingEdges(ISSABasicBlock node) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } + @Override public void removeOutgoingEdges(ISSABasicBlock node) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } + @Override public boolean hasEdge(ISSABasicBlock src, ISSABasicBlock dst) throws UnimplementedError { return getSuccNodeNumbers(src).contains(getNumber(dst)); } + @Override public IntSet getSuccNodeNumbers(ISSABasicBlock b) throws IllegalArgumentException { if (b == null) { throw new IllegalArgumentException("b == null"); @@ -1088,6 +1147,7 @@ public class SSACFG implements ControlFlowGraph return delegate.getSuccNodeNumbers(n); } + @Override public IntSet getPredNodeNumbers(ISSABasicBlock node) throws UnimplementedError { Assertions.UNREACHABLE(); return null; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSAInstruction.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSAInstruction.java index 9f58a5802..23ae24a8e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSAInstruction.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSAInstruction.java @@ -116,72 +116,95 @@ public abstract class SSAInstruction { * A base visitor implementation that does nothing. */ public static abstract class Visitor implements IVisitor { + @Override public void visitGoto(SSAGotoInstruction instruction) { } + @Override public void visitArrayLoad(SSAArrayLoadInstruction instruction) { } + @Override public void visitArrayStore(SSAArrayStoreInstruction instruction) { } + @Override public void visitBinaryOp(SSABinaryOpInstruction instruction) { } + @Override public void visitUnaryOp(SSAUnaryOpInstruction instruction) { } + @Override public void visitConversion(SSAConversionInstruction instruction) { } + @Override public void visitComparison(SSAComparisonInstruction instruction) { } + @Override public void visitConditionalBranch(SSAConditionalBranchInstruction instruction) { } + @Override public void visitSwitch(SSASwitchInstruction instruction) { } + @Override public void visitReturn(SSAReturnInstruction instruction) { } + @Override public void visitGet(SSAGetInstruction instruction) { } + @Override public void visitPut(SSAPutInstruction instruction) { } + @Override public void visitInvoke(SSAInvokeInstruction instruction) { } + @Override public void visitNew(SSANewInstruction instruction) { } + @Override public void visitArrayLength(SSAArrayLengthInstruction instruction) { } + @Override public void visitThrow(SSAThrowInstruction instruction) { } + @Override public void visitMonitor(SSAMonitorInstruction instruction) { } + @Override public void visitCheckCast(SSACheckCastInstruction instruction) { } + @Override public void visitInstanceof(SSAInstanceofInstruction instruction) { } + @Override public void visitPhi(SSAPhiInstruction instruction) { } + @Override public void visitPi(SSAPiInstruction instruction) { } + @Override public void visitGetCaughtException(SSAGetCaughtExceptionInstruction instruction) { } + @Override public void visitLoadMetadata(SSALoadMetadataInstruction instruction) { } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSASwitchInstruction.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSASwitchInstruction.java index fa679f0f3..139909d8f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSASwitchInstruction.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSASwitchInstruction.java @@ -112,10 +112,12 @@ public class SSASwitchInstruction extends SSAInstruction { return new IntIterator() { private int i = 0; + @Override public boolean hasNext() { return i < casesAndLabels.length; } + @Override public int next() { int v = casesAndLabels[i]; i += 2; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/ShrikeIndirectionData.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/ShrikeIndirectionData.java index c05af11d0..f28435d20 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/ShrikeIndirectionData.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/ShrikeIndirectionData.java @@ -68,6 +68,7 @@ public class ShrikeIndirectionData implements SSAIndirectionData(2); @@ -92,6 +95,7 @@ public class ShrikeIndirectionData implements SSAIndirectionData(2); @@ -100,6 +104,7 @@ public class ShrikeIndirectionData implements SSAIndirectionData getNames() { HashSet result = new HashSet(); for (int i = 0; i < uses.length; i++) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/ExplodedControlFlowGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/ExplodedControlFlowGraph.java index f702434cc..0766b4551 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/ExplodedControlFlowGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/ExplodedControlFlowGraph.java @@ -89,14 +89,17 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph getExceptionalPredecessors(IExplodedBasicBlock bb) { ExplodedBasicBlock eb = (ExplodedBasicBlock) bb; assert eb != null; @@ -133,6 +138,7 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph getExceptionalSuccessors(IExplodedBasicBlock bb) { ExplodedBasicBlock eb = (ExplodedBasicBlock) bb; assert eb != null; @@ -155,14 +161,17 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph getNormalPredecessors(IExplodedBasicBlock bb) { ExplodedBasicBlock eb = (ExplodedBasicBlock) bb; assert eb != null; @@ -191,6 +200,7 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph getNormalSuccessors(IExplodedBasicBlock bb) { ExplodedBasicBlock eb = (ExplodedBasicBlock) bb; assert eb != null; @@ -220,38 +230,47 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph iterator() { return allNodes.iterator(); } + @Override public void removeNode(IExplodedBasicBlock n) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } + @Override public void addEdge(IExplodedBasicBlock src, IExplodedBasicBlock dst) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } + @Override public int getPredNodeCount(IExplodedBasicBlock bb) throws IllegalArgumentException { ExplodedBasicBlock eb = (ExplodedBasicBlock) bb; if (eb == null) { @@ -274,6 +293,7 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph getPredNodes(IExplodedBasicBlock bb) throws IllegalArgumentException { ExplodedBasicBlock eb = (ExplodedBasicBlock) bb; if (eb == null) { @@ -310,6 +330,7 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph getSuccNodes(IExplodedBasicBlock bb) { ExplodedBasicBlock eb = (ExplodedBasicBlock) bb; assert eb != null; @@ -350,32 +372,39 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph iterateNodes(IntSet s) throws UnimplementedError { Assertions.UNREACHABLE(); return null; } + @Override public IntSet getPredNodeNumbers(IExplodedBasicBlock node) { MutableSparseIntSet result = MutableSparseIntSet.makeEmpty(); for (Iterator it = getPredNodes(node); it.hasNext();) { @@ -406,6 +438,7 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph getCaughtExceptionTypes() { if (original instanceof ExceptionHandlerBasicBlock) { ExceptionHandlerBasicBlock eb = (ExceptionHandlerBasicBlock) original; @@ -442,18 +476,22 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph iterator() { if (isEntryBlock() || isExitBlock() || getInstruction() == null) { return EmptyIterator.instance(); @@ -532,6 +577,7 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph iteratePhis() { if (isEntryBlock() || isExitBlock() || instructionIndex != original.getFirstInstructionIndex()) { return EmptyIterator.instance(); @@ -556,6 +604,7 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph iteratePis() { if (isEntryBlock() || isExitBlock() || instructionIndex != original.getLastInstructionIndex()) { return EmptyIterator.instance(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/scope/JUnitEntryPoints.java b/com.ibm.wala.core/src/com/ibm/wala/util/scope/JUnitEntryPoints.java index a6546f4c4..8c6e10f6c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/scope/JUnitEntryPoints.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/scope/JUnitEntryPoints.java @@ -69,6 +69,7 @@ public class JUnitEntryPoints { } } return new Iterable() { + @Override public Iterator iterator() { return result.iterator(); } @@ -128,6 +129,7 @@ public class JUnitEntryPoints { e.printStackTrace(); } return new Iterable() { + @Override public Iterator iterator() { return entryPts.iterator(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/warnings/Warning.java b/com.ibm.wala.core/src/com/ibm/wala/util/warnings/Warning.java index 0652e5787..cdd80d2d2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/warnings/Warning.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/warnings/Warning.java @@ -46,6 +46,7 @@ public abstract class Warning implements Comparable { * * @throws ClassCastException if o is not a Warning */ + @Override public int compareTo(Object o) throws ClassCastException { if (o == null) { return -1; diff --git a/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java b/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java index d4486a26a..a18c95572 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java +++ b/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java @@ -80,6 +80,7 @@ public class PDFViewUtil { labelMap.put(bb, getNodeLabel(ir, bb)); } NodeDecorator labels = new NodeDecorator() { + @Override public String getLabel(Object o) { return labelMap.get(o); } @@ -101,6 +102,7 @@ public class PDFViewUtil { this.B = B; } + @Override public String getLabel(Object o) throws WalaException { return A.getLabel(o) + B.getLabel(o); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/CgPanel.java b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/CgPanel.java index cb3c01ef6..726be8c15 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/CgPanel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/CgPanel.java @@ -45,6 +45,7 @@ public class CgPanel extends JSplitPane{ this.setRightComponent(irViewer.getComponent()); tree.addTreeSelectionListener(new TreeSelectionListener() { + @Override public void valueChanged(TreeSelectionEvent e) { TreePath newLeadSelectionPath = e.getNewLeadSelectionPath(); if (null == newLeadSelectionPath){ @@ -76,6 +77,7 @@ public class CgPanel extends JSplitPane{ tree.addTreeExpansionListener(new TreeExpansionListener() { + @Override public void treeExpanded(TreeExpansionEvent event) { TreePath path = event.getPath(); if (path == null) { @@ -85,6 +87,7 @@ public class CgPanel extends JSplitPane{ expandNode(lastNode); } + @Override public void treeCollapsed(TreeExpansionEvent event) { } diff --git a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/ChaPanel.java b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/ChaPanel.java index 6a39cb66e..07c8e02ba 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/ChaPanel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/ChaPanel.java @@ -44,6 +44,7 @@ public class ChaPanel extends JSplitPane { this.setRightComponent(methodList); tree.addTreeSelectionListener(new TreeSelectionListener(){ + @Override public void valueChanged(TreeSelectionEvent e) { TreePath newLeadSelectionPath = e.getNewLeadSelectionPath(); if (null == newLeadSelectionPath){ @@ -69,6 +70,7 @@ public class ChaPanel extends JSplitPane { tree.addTreeExpansionListener(new TreeExpansionListener() { + @Override public void treeExpanded(TreeExpansionEvent event) { TreePath path = event.getPath(); if (path == null) { @@ -78,6 +80,7 @@ public class ChaPanel extends JSplitPane { expandNode(lastNode); } + @Override public void treeCollapsed(TreeExpansionEvent event) { } diff --git a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/DualTreeCellRenderer.java b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/DualTreeCellRenderer.java index 831f17f72..e4bc0b061 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/DualTreeCellRenderer.java +++ b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/DualTreeCellRenderer.java @@ -47,6 +47,7 @@ class DualTreeCellRenderer implements TreeCellRenderer { pkTreeCellRenderer.setLeafIcon(createImageIcon("images/pk_leaf.png")); } + @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { TreeCellRenderer delegate = getTreeCellRenderer(value); diff --git a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/IrAndSourceViewer.java b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/IrAndSourceViewer.java index c085c3c74..46a5fd1ce 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/IrAndSourceViewer.java +++ b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/IrAndSourceViewer.java @@ -45,6 +45,7 @@ public class IrAndSourceViewer { irViewer.addSelectedPcListner(new SelectedPcListner(){ + @Override public void valueChanged(int pc) { IMethod method = ir.getMethod(); int sourceLineNumber = IrViewer.NA; diff --git a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/IrViewer.java b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/IrViewer.java index acc22daf5..14871d72f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/IrViewer.java +++ b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/IrViewer.java @@ -58,6 +58,7 @@ public class IrViewer extends JPanel{ irLines.addListSelectionListener(new ListSelectionListener() { + @Override public void valueChanged(ListSelectionEvent e) { int index = irLines.getSelectedIndex(); Integer pc = lineToPc.get(index); diff --git a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/PaPanel.java b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/PaPanel.java index 7c1e4ec8d..c192a5775 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/PaPanel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/PaPanel.java @@ -102,6 +102,7 @@ public class PaPanel extends JSplitPane { heapTree.addTreeExpansionListener(new TreeExpansionListener() { + @Override public void treeExpanded(TreeExpansionEvent event) { TreePath path = event.getPath(); if (path == null) { @@ -111,12 +112,14 @@ public class PaPanel extends JSplitPane { expandNodeRec(lastNode, 2); } + @Override public void treeCollapsed(TreeExpansionEvent event) { } }); heapTree.addTreeSelectionListener(new TreeSelectionListener() { + @Override public void valueChanged(TreeSelectionEvent e) { TreePath newLeadSelectionPath = e.getNewLeadSelectionPath(); if (null == newLeadSelectionPath){ diff --git a/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/cast/java/jdt/test/Activator.java b/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/cast/java/jdt/test/Activator.java index d026d2231..eb9e5a120 100644 --- a/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/cast/java/jdt/test/Activator.java +++ b/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/cast/java/jdt/test/Activator.java @@ -62,6 +62,7 @@ public class Activator extends Plugin { * * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext) */ + @Override public void start(BundleContext context) throws Exception { super.start(context); plugin = this; @@ -72,6 +73,7 @@ public class Activator extends Plugin { * * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext) */ + @Override public void stop(BundleContext context) throws Exception { plugin = null; super.stop(context); diff --git a/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/cast/java/test/TypeInferenceAssertion.java b/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/cast/java/test/TypeInferenceAssertion.java index 09fffd24b..637860f61 100644 --- a/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/cast/java/test/TypeInferenceAssertion.java +++ b/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/cast/java/test/TypeInferenceAssertion.java @@ -30,6 +30,7 @@ final class TypeInferenceAssertion implements IRAssertion { } // For now just check things in the main method + @Override public void check(CallGraph cg) { IR ir = getIR(cg, typeName, "main", "[Ljava/lang/String;", "V"); AstJavaTypeInference inference = new AstJavaTypeInference(ir, cg.getClassHierarchy(), true); diff --git a/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/FakeExceptionTypeBinding.java b/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/FakeExceptionTypeBinding.java index 2f8a19b1e..257946756 100644 --- a/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/FakeExceptionTypeBinding.java +++ b/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/FakeExceptionTypeBinding.java @@ -76,11 +76,13 @@ public class FakeExceptionTypeBinding implements ITypeBinding { this.exceptionBinaryName = exceptionBinaryName; } + @Override public boolean isAssignmentCompatible(ITypeBinding variableType) { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public boolean equals(Object o) { if (o instanceof FakeExceptionTypeBinding) return this == o; @@ -91,211 +93,253 @@ public class FakeExceptionTypeBinding implements ITypeBinding { // --- rest not needed + @Override public ITypeBinding createArrayType(int dimension) { Assertions.UNREACHABLE("FakeExceptionTypeBinding createArrayType"); return null; } + @Override public String getBinaryName() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public ITypeBinding getBound() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public ITypeBinding getComponentType() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public IVariableBinding[] getDeclaredFields() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public IMethodBinding[] getDeclaredMethods() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public int getDeclaredModifiers() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return 0; } + @Override public ITypeBinding[] getDeclaredTypes() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public ITypeBinding getDeclaringClass() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public IMethodBinding getDeclaringMethod() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public int getDimensions() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return 0; } + @Override public ITypeBinding getElementType() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public ITypeBinding getErasure() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public ITypeBinding[] getInterfaces() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public int getModifiers() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return 0; } + @Override public String getName() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public IPackageBinding getPackage() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public String getQualifiedName() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public ITypeBinding getSuperclass() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public ITypeBinding[] getTypeArguments() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public ITypeBinding[] getTypeBounds() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public ITypeBinding getTypeDeclaration() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public ITypeBinding[] getTypeParameters() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public ITypeBinding getWildcard() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public boolean isAnnotation() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public boolean isAnonymous() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public boolean isArray() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public boolean isCapture() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public boolean isCastCompatible(ITypeBinding type) { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public boolean isClass() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public boolean isEnum() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public boolean isFromSource() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public boolean isGenericType() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public boolean isInterface() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public boolean isLocal() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public boolean isMember() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public boolean isNested() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public boolean isNullType() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public boolean isParameterizedType() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public boolean isPrimitive() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public boolean isRawType() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public boolean isSubTypeCompatible(ITypeBinding type) { String name = type.getBinaryName(); if (exceptionBinaryName.endsWith("Error;")) { @@ -313,70 +357,84 @@ public class FakeExceptionTypeBinding implements ITypeBinding { return false; } + @Override public boolean isTopLevel() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public boolean isTypeVariable() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public boolean isUpperbound() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public boolean isWildcardType() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public IAnnotationBinding[] getAnnotations() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public IJavaElement getJavaElement() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public String getKey() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public int getKind() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return 0; } + @Override public boolean isDeprecated() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public boolean isEqualTo(IBinding binding) { return this.equals(binding); } + @Override public boolean isRecovered() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public boolean isSynthetic() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return false; } + @Override public ITypeBinding getGenericTypeOfWildcardType() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return null; } + @Override public int getRank() { Assertions.UNREACHABLE("FakeExceptionTypeBinding "); return 0; diff --git a/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTClassLoaderFactory.java b/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTClassLoaderFactory.java index aa2ee5224..426ac79a1 100644 --- a/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTClassLoaderFactory.java +++ b/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTClassLoaderFactory.java @@ -60,6 +60,7 @@ public class JDTClassLoaderFactory extends ClassLoaderFactoryImpl { super(exclusions); } + @Override protected IClassLoader makeNewClassLoader(ClassLoaderReference classLoaderReference, IClassHierarchy cha, IClassLoader parent, AnalysisScope scope) throws IOException { if (classLoaderReference.equals(JavaSourceAnalysisScope.SOURCE)) { diff --git a/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTJava2CAstTranslator.java b/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTJava2CAstTranslator.java index 21603eb39..4e4f00466 100644 --- a/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTJava2CAstTranslator.java +++ b/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTJava2CAstTranslator.java @@ -53,7 +53,6 @@ import org.eclipse.core.resources.IFile; import org.eclipse.jdt.core.dom.AST; import org.eclipse.jdt.core.dom.ASTNode; import org.eclipse.jdt.core.dom.AbstractTypeDeclaration; -import org.eclipse.jdt.core.dom.Annotation; import org.eclipse.jdt.core.dom.AnnotationTypeDeclaration; import org.eclipse.jdt.core.dom.AnnotationTypeMemberDeclaration; import org.eclipse.jdt.core.dom.AnonymousClassDeclaration; @@ -294,75 +293,92 @@ public class JDTJava2CAstTranslator { } - public int getKind() { + @Override + public int getKind() { return TYPE_ENTITY; } + @Override public String getName() { return fName; // unqualified? } + @Override public String getSignature() { return "L" + fName.replace('.', '/') + ";"; } + @Override public String[] getArgumentNames() { return new String[0]; } + @Override public CAstNode[] getArgumentDefaults() { return new CAstNode[0]; } + @Override public int getArgumentCount() { return 0; } + @Override public CAstNode getAST() { // This entity has no AST nodes, really. return null; } + @Override public Map> getAllScopedEntities() { return Collections.singletonMap(null, fEntities); } + @Override public Iterator getScopedEntities(CAstNode construct) { Assertions.UNREACHABLE("Non-AST-bearing entity (ClassEntity) asked for scoped entities related to a given AST node"); return null; } + @Override public CAstControlFlowMap getControlFlow() { // This entity has no AST nodes, really. return null; } + @Override public CAstSourcePositionMap getSourceMap() { // This entity has no AST nodes, really. return null; } + @Override public CAstSourcePositionMap.Position getPosition() { return fSourcePosition; } + @Override public CAstNodeTypeMap getNodeTypeMap() { // This entity has no AST nodes, really. return new CAstNodeTypeMap() { + @Override public CAstType getNodeType(CAstNode node) { throw new UnsupportedOperationException(); } - public Collection getMappedNodes() { + @Override + public Collection getMappedNodes() { throw new UnsupportedOperationException(); } }; } + @Override public Collection getQualifiers() { return fQuals; } + @Override public CAstType getType() { // return new JdtJavaType(fCT, getTypeDict(), fTypeSystem); return fTypeDict.new JdtJavaType(fJdtType); @@ -826,10 +842,12 @@ public class JDTJava2CAstTranslator { // From Code Body Entity private final Map> fEntities; + @Override public Map> getAllScopedEntities() { return Collections.unmodifiableMap(fEntities); } + @Override public Iterator getScopedEntities(CAstNode construct) { if (fEntities.containsKey(construct)) { return (fEntities.get(construct)).iterator(); @@ -838,6 +856,7 @@ public class JDTJava2CAstTranslator { } } + @Override public String getSignature() { return Util.methodEntityToSelector(this).toString(); } @@ -937,14 +956,17 @@ public class JDTJava2CAstTranslator { return annotations; } - public String toString() { + @Override + public String toString() { return fDecl == null ? "" : fDecl.toString(); } + @Override public int getKind() { return CAstEntity.FUNCTION_ENTITY; } + @Override public String getName() { if (fDecl == null) return MethodReference.clinitName.toString(); @@ -957,10 +979,12 @@ public class JDTJava2CAstTranslator { /** * INCLUDING first parameter 'this' (for non-static methods) */ + @Override public String[] getArgumentNames() { return fParameterNames; } + @Override public CAstNode[] getArgumentDefaults() { return new CAstNode[0]; } @@ -968,30 +992,37 @@ public class JDTJava2CAstTranslator { /** * INCLUDING first parameter 'this' (for non-static methods) */ + @Override public int getArgumentCount() { return fParameterNames.length; } + @Override public CAstNode getAST() { return fAst; } + @Override public CAstControlFlowMap getControlFlow() { return fContext.cfg(); } + @Override public CAstSourcePositionMap getSourceMap() { return fContext.pos(); } + @Override public CAstSourcePositionMap.Position getPosition() { return fDecl==null? getSourceMap().getPosition(fAst): makePosition(fDecl); } + @Override public CAstNodeTypeMap getNodeTypeMap() { return fContext.getNodeTypeMap(); } + @Override public Collection getQualifiers() { if (fDecl == null) return JDT2CAstUtils.mapModifiersToQualifiers(Modifier.STATIC, false, false); // static init @@ -999,10 +1030,12 @@ public class JDTJava2CAstTranslator { return JDT2CAstUtils.mapModifiersToQualifiers(fModifiers, false, false); } + @Override public CAstType getType() { return new CAstType.Method() { private Collection fExceptionTypes = null; + @Override @SuppressWarnings("deprecation") public CAstType getReturnType() { if (fReturnType != null) @@ -1017,6 +1050,7 @@ public class JDTJava2CAstTranslator { /** * NOT INCLUDING first parameter 'this' (for non-static methods) */ + @Override public List getArgumentTypes() { return fParameterTypes; } @@ -1024,20 +1058,24 @@ public class JDTJava2CAstTranslator { /** * NOT INCLUDING first parameter 'this' (for non-static methods) */ + @Override public int getArgumentCount() { return fDecl == null ? 0 : fParameterTypes.size(); } + @Override public String getName() { Assertions.UNREACHABLE("CAstType.FunctionImpl#getName() called???"); return "?"; } + @Override public Collection getSupertypes() { Assertions.UNREACHABLE("CAstType.FunctionImpl#getSupertypes() called???"); return null; } + @Override public Collection/* */getExceptionTypes() { if (fExceptionTypes == null) { fExceptionTypes = new LinkedHashSet(); @@ -1048,6 +1086,7 @@ public class JDTJava2CAstTranslator { return fExceptionTypes; } + @Override public CAstType getDeclaringType() { return fTypeDict.getCAstTypeFor(fType); } @@ -1122,70 +1161,85 @@ public class JDTJava2CAstTranslator { return annotations; } - public int getKind() { + @Override + public int getKind() { return CAstEntity.FIELD_ENTITY; } + @Override public String getName() { return name; } + @Override public String getSignature() { return name + fIdentityMapper.typeToTypeID(type); } + @Override public String[] getArgumentNames() { return new String[0]; } + @Override public CAstNode[] getArgumentDefaults() { return new CAstNode[0]; } + @Override public int getArgumentCount() { return 0; } + @Override public Iterator getScopedEntities(CAstNode construct) { return EmptyIterator.instance(); } + @Override public Map> getAllScopedEntities() { return Collections.emptyMap(); } + @Override public CAstNode getAST() { // No AST for a field decl; initializers folded into // constructor processing... return null; } + @Override public CAstControlFlowMap getControlFlow() { // No AST for a field decl; initializers folded into // constructor processing... return null; } + @Override public CAstSourcePositionMap getSourceMap() { // No AST for a field decl; initializers folded into // constructor processing... return null; } + @Override public CAstSourcePositionMap.Position getPosition() { return position; } + @Override public CAstNodeTypeMap getNodeTypeMap() { // No AST for a field decl; initializers folded into // constructor processing... return null; } + @Override public Collection getQualifiers() { return quals; } + @Override public CAstType getType() { return fTypeDict.getCAstTypeFor(type); } @@ -2906,67 +2960,82 @@ public class JDTJava2CAstTranslator { return null; } - public int getKind() { + @Override + public int getKind() { return FILE_ENTITY; } + @Override public String getName() { return fName; } + @Override public String getSignature() { Assertions.UNREACHABLE(); return null; } + @Override public String[] getArgumentNames() { return new String[0]; } + @Override public CAstNode[] getArgumentDefaults() { return new CAstNode[0]; } + @Override public int getArgumentCount() { return 0; } + @Override public Map> getAllScopedEntities() { return Collections.singletonMap(null, fTopLevelDecls); } + @Override public Iterator getScopedEntities(CAstNode construct) { Assertions.UNREACHABLE("CompilationUnitEntity asked for AST-related entities, but it has no AST."); return null; } + @Override public CAstNode getAST() { return null; } + @Override public CAstControlFlowMap getControlFlow() { Assertions.UNREACHABLE("CompilationUnitEntity.getControlFlow()"); return null; } + @Override public CAstSourcePositionMap getSourceMap() { Assertions.UNREACHABLE("CompilationUnitEntity.getSourceMap()"); return null; } + @Override public CAstSourcePositionMap.Position getPosition() { return null; } + @Override public CAstNodeTypeMap getNodeTypeMap() { Assertions.UNREACHABLE("CompilationUnitEntity.getNodeTypeMap()"); return null; } + @Override public Collection getQualifiers() { return Collections.EMPTY_LIST; } + @Override public CAstType getType() { Assertions.UNREACHABLE("CompilationUnitEntity.getType()"); return null; @@ -3001,15 +3070,18 @@ public class JDTJava2CAstTranslator { super(parent); } + @Override public Collection> getCatchTargets(ITypeBinding type) { return parent.getCatchTargets(type); } + @Override public Map getLabelMap() { return parent.getLabelMap(); } - public boolean needLValue() { + @Override + public boolean needLValue() { return parent.needLValue(); } } @@ -3018,16 +3090,19 @@ public class JDTJava2CAstTranslator { * Root context. Doesn't do anything. */ public static class RootContext extends TranslatorToCAst.RootContext implements WalkContext { - public Collection> getCatchTargets(ITypeBinding type) { + @Override + public Collection> getCatchTargets(ITypeBinding type) { Assertions.UNREACHABLE("RootContext.getCatchTargets()"); return null; } + @Override public Map getLabelMap() { Assertions.UNREACHABLE("RootContext.getLabelMap()"); return null; } + @Override public boolean needLValue() { Assertions.UNREACHABLE("Rootcontext.needLValue()"); return false; @@ -3040,6 +3115,7 @@ public class JDTJava2CAstTranslator { super(parent); } + @Override public boolean needLValue() { return true; } @@ -3059,6 +3135,7 @@ public class JDTJava2CAstTranslator { } } + @Override public Collection> getCatchTargets(ITypeBinding label) { // Look for all matching targets for this thrown type: // if supertpe match, then return only matches at this catch @@ -3098,6 +3175,7 @@ public class JDTJava2CAstTranslator { this.breakTo = breakTo; } + @Override public ASTNode getBreakFor(String label) { return (label == null || label.equals(this.label)) ? breakTo : super.getBreakFor(label); } @@ -3111,6 +3189,7 @@ public class JDTJava2CAstTranslator { this.continueTo = continueTo; } + @Override public ASTNode getContinueFor(String label) { return (label == null || label.equals(this.label)) ? continueTo : super.getContinueFor(label); } @@ -3127,6 +3206,7 @@ public class JDTJava2CAstTranslator { fEntities = entities; } + @Override public Map getLabelMap() { return labelMap; // labels are kept within a method. } @@ -3137,22 +3217,27 @@ public class JDTJava2CAstTranslator { final CAstNodeTypeMapRecorder fNodeTypeMap = new CAstNodeTypeMapRecorder(); + @Override public CAstControlFlowRecorder cfg() { return fCFG; } + @Override public void addScopedEntity(CAstNode node, CAstEntity entity) { fEntities.put(node, entity); } + @Override public CAstSourcePositionRecorder pos() { return fSourceMap; } + @Override public CAstNodeTypeMapRecorder getNodeTypeMap() { return fNodeTypeMap; } + @Override public Collection> getCatchTargets(ITypeBinding label) { // TAGALONG (need fRuntimeExcType) // Why do we seemingly catch a RuntimeException in every method? this won't catch the RuntimeException above where @@ -3162,6 +3247,7 @@ public class JDTJava2CAstTranslator { return result; } + @Override public boolean needLValue() { return false; } @@ -3397,6 +3483,7 @@ public class JDTJava2CAstTranslator { // constants are unsorted by default Collections.sort(constants, new Comparator() { + @Override public int compare(IVariableBinding arg0, IVariableBinding arg1) { return arg0.getVariableId() - arg1.getVariableId(); } diff --git a/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTSourceLoaderImpl.java b/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTSourceLoaderImpl.java index 77d299886..2e38e7366 100644 --- a/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTSourceLoaderImpl.java +++ b/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTSourceLoaderImpl.java @@ -53,6 +53,7 @@ public class JDTSourceLoaderImpl extends JavaSourceLoaderImpl { super(loaderRef, parent, exclusions, cha); } + @Override protected SourceModuleTranslator getTranslator() { return new JDTSourceModuleTranslator(cha.getScope(), this); } diff --git a/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTSourceModuleTranslator.java b/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTSourceModuleTranslator.java index 275e1f82f..55d1cccc0 100644 --- a/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTSourceModuleTranslator.java +++ b/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTSourceModuleTranslator.java @@ -113,6 +113,7 @@ public class JDTSourceModuleTranslator implements SourceModuleTranslator { * Project -> AST code from org.eclipse.jdt.core.tests.performance */ + @Override public void loadAllSources(Set modules) { // TODO: we might need one AST (-> "Object" class) for all files. // TODO: group by project and send 'em in @@ -137,6 +138,7 @@ public class JDTSourceModuleTranslator implements SourceModuleTranslator { Set units = proj.getValue().keySet(); parser.createASTs(units.toArray(new ICompilationUnit[units.size()]), new String[0], new ASTRequestor() { + @Override public void acceptAST(ICompilationUnit source, CompilationUnit ast) { try { diff --git a/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTTypeDictionary.java b/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTTypeDictionary.java index a59b60363..d83121ffc 100644 --- a/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTTypeDictionary.java +++ b/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTTypeDictionary.java @@ -69,6 +69,7 @@ public class JDTTypeDictionary extends CAstTypeDictionaryImpl { fIdentityMapper = identityMapper; } + @Override public CAstType getCAstTypeFor(Object astType) { ITypeBinding jdtType = JDT2CAstUtils.getErasedType((ITypeBinding) astType, fAst); @@ -104,18 +105,22 @@ public class JDTTypeDictionary extends CAstTypeDictionaryImpl { fEltCAstType = getCAstTypeFor(fEltJdtType); } + @Override public int getNumDimensions() { return 1; // always 1 for Java } + @Override public CAstType getElementType() { return fEltCAstType; } + @Override public String getName() { return "[" + fEltCAstType.getName(); } + @Override @SuppressWarnings("unchecked") public Collection getSupertypes() { if (fEltJdtType.isPrimitive()) @@ -139,6 +144,7 @@ public class JDTTypeDictionary extends CAstTypeDictionaryImpl { private Collection fSuperTypes = null; + @Override public String toString() { return super.toString() + ":" + getName(); } @@ -148,10 +154,12 @@ public class JDTTypeDictionary extends CAstTypeDictionaryImpl { fType = type; } + @Override public String getName() { return fIdentityMapper.getTypeRef(fType).getName().toString(); } + @Override @SuppressWarnings("unchecked") public Collection getSupertypes() { if (fSuperTypes == null) { @@ -175,10 +183,12 @@ public class JDTTypeDictionary extends CAstTypeDictionaryImpl { fSuperTypes.add(getCAstTypeFor(t)); } + @Override public Collection getQualifiers() { return JDT2CAstUtils.mapModifiersToQualifiers(fType.getModifiers(), fType.isInterface(), fType.isAnnotation()); } + @Override public boolean isInterface() { return fType.isInterface(); } diff --git a/com.ibm.wala.ide.jdt/source/com/ibm/wala/ide/AbstractJavaAnalysisAction.java b/com.ibm.wala.ide.jdt/source/com/ibm/wala/ide/AbstractJavaAnalysisAction.java index 6c044f1f3..e9c0a42d7 100644 --- a/com.ibm.wala.ide.jdt/source/com/ibm/wala/ide/AbstractJavaAnalysisAction.java +++ b/com.ibm.wala.ide.jdt/source/com/ibm/wala/ide/AbstractJavaAnalysisAction.java @@ -59,6 +59,7 @@ public abstract class AbstractJavaAnalysisAction implements IObjectActionDelegat /* * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart) */ + @Override public void setActivePart(IAction action, IWorkbenchPart targetPart) { } @@ -190,6 +191,7 @@ public abstract class AbstractJavaAnalysisAction implements IObjectActionDelegat /* * @see IActionDelegate#run(IAction) */ + @Override public void run(IAction action) { IProgressService progressService = PlatformUI.getWorkbench().getProgressService(); try { @@ -205,6 +207,7 @@ public abstract class AbstractJavaAnalysisAction implements IObjectActionDelegat /* * @see IActionDelegate#selectionChanged(IAction, ISelection) */ + @Override public void selectionChanged(IAction action, ISelection selection) { currentSelection = selection; } diff --git a/com.ibm.wala.ide.jdt/source/com/ibm/wala/ide/jdt/Activator.java b/com.ibm.wala.ide.jdt/source/com/ibm/wala/ide/jdt/Activator.java index b954afbad..67cc47497 100644 --- a/com.ibm.wala.ide.jdt/source/com/ibm/wala/ide/jdt/Activator.java +++ b/com.ibm.wala.ide.jdt/source/com/ibm/wala/ide/jdt/Activator.java @@ -34,7 +34,8 @@ public class Activator extends AbstractUIPlugin { * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) */ - public void start(BundleContext context) throws Exception { + @Override + public void start(BundleContext context) throws Exception { super.start(context); plugin = this; } @@ -43,7 +44,8 @@ public class Activator extends AbstractUIPlugin { * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) */ - public void stop(BundleContext context) throws Exception { + @Override + public void stop(BundleContext context) throws Exception { plugin = null; super.stop(context); } diff --git a/com.ibm.wala.ide.jdt/source/com/ibm/wala/ide/util/JdtPosition.java b/com.ibm.wala.ide.jdt/source/com/ibm/wala/ide/util/JdtPosition.java index 0913be3bb..861eddfb2 100644 --- a/com.ibm.wala.ide.jdt/source/com/ibm/wala/ide/util/JdtPosition.java +++ b/com.ibm.wala.ide.jdt/source/com/ibm/wala/ide/util/JdtPosition.java @@ -40,26 +40,32 @@ public final class JdtPosition implements Position { this.eclipseFile = eclipseFile; } + @Override public int getFirstCol() { return -1; } + @Override public int getFirstLine() { return firstLine; } + @Override public InputStream getInputStream() throws IOException { return null; } + @Override public int getLastCol() { return -1; } + @Override public int getLastLine() { return lastLine; } + @Override public URL getURL() { try { return new URL("file:" + path); @@ -69,6 +75,7 @@ public final class JdtPosition implements Position { } } + @Override public int compareTo(Object arg0) { if (arg0 instanceof JdtPosition) { if (firstOffset != ((JdtPosition)arg0).firstOffset) { @@ -81,14 +88,17 @@ public final class JdtPosition implements Position { return 0; } + @Override public int getFirstOffset() { return firstOffset; } + @Override public int getLastOffset() { return lastOffset; } + @Override public String toString() { return "[offset " + firstOffset + ":" + lastOffset + "]"; } diff --git a/com.ibm.wala.ide.jsdt/source/com/ibm/wala/ide/jsdt/Activator.java b/com.ibm.wala.ide.jsdt/source/com/ibm/wala/ide/jsdt/Activator.java index a12ba2a07..2e5a74261 100644 --- a/com.ibm.wala.ide.jsdt/source/com/ibm/wala/ide/jsdt/Activator.java +++ b/com.ibm.wala.ide.jsdt/source/com/ibm/wala/ide/jsdt/Activator.java @@ -34,7 +34,8 @@ public class Activator extends AbstractUIPlugin { * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) */ - public void start(BundleContext context) throws Exception { + @Override + public void start(BundleContext context) throws Exception { super.start(context); plugin = this; } @@ -43,7 +44,8 @@ public class Activator extends AbstractUIPlugin { * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) */ - public void stop(BundleContext context) throws Exception { + @Override + public void stop(BundleContext context) throws Exception { plugin = null; super.stop(context); } diff --git a/com.ibm.wala.ide.jsdt/source/com/ibm/wala/ide/util/JavaScriptHeadlessUtil.java b/com.ibm.wala.ide.jsdt/source/com/ibm/wala/ide/util/JavaScriptHeadlessUtil.java index e7943c5fc..3f2a36d99 100644 --- a/com.ibm.wala.ide.jsdt/source/com/ibm/wala/ide/util/JavaScriptHeadlessUtil.java +++ b/com.ibm.wala.ide.jsdt/source/com/ibm/wala/ide/util/JavaScriptHeadlessUtil.java @@ -21,7 +21,8 @@ public class JavaScriptHeadlessUtil extends HeadlessUtil { public static IJavaScriptProject getJavaScriptProjectFromWorkspace(final String projectName) { IJavaScriptProject jp = getProjectFromWorkspace(new Function() { - public IJavaScriptProject apply(IProject p) { + @Override + public IJavaScriptProject apply(IProject p) { try { if (p.hasNature(JavaScriptCore.NATURE_ID)) { IJavaScriptProject jp = JavaScriptCore.create(p); diff --git a/com.ibm.wala.ide.jsdt/source/com/ibm/wala/ide/util/JsdtUtil.java b/com.ibm.wala.ide.jsdt/source/com/ibm/wala/ide/util/JsdtUtil.java index 5e35c5b61..c2d4e6d4f 100644 --- a/com.ibm.wala.ide.jsdt/source/com/ibm/wala/ide/util/JsdtUtil.java +++ b/com.ibm.wala.ide.jsdt/source/com/ibm/wala/ide/util/JsdtUtil.java @@ -82,17 +82,21 @@ public class JsdtUtil { public static CGInfo buildJSDTCallGraph(Set mes) { final CGInfo info = new CGInfo(); HeadlessUtil.parseModules(mes, new EclipseCompiler() { + @Override public IJavaScriptUnit getCompilationUnit(IFile file) { return JavaScriptCore.createCompilationUnitFrom(file); } + @Override public Parser getParser() { return new Parser() { IJavaScriptProject project; + @Override public void setProject(IProject project) { this.project = JavaScriptCore.create(project); } + @Override public void processASTs(Map files, Function errors) { final ASTVisitor visitor = new ASTVisitor() { private final CallHierarchy ch = CallHierarchy.getDefault(); diff --git a/com.ibm.wala.ide.tests/src/com/ibm/wala/eclipse/headless/Main.java b/com.ibm.wala.ide.tests/src/com/ibm/wala/eclipse/headless/Main.java index ad6b680b5..03fb285f3 100644 --- a/com.ibm.wala.ide.tests/src/com/ibm/wala/eclipse/headless/Main.java +++ b/com.ibm.wala.ide.tests/src/com/ibm/wala/eclipse/headless/Main.java @@ -30,6 +30,7 @@ import com.ibm.wala.ide.util.JdtUtil; */ public class Main implements IApplication { + @Override public Object start(IApplicationContext context) throws Exception { Collection jp = JdtUtil.getWorkspaceJavaProjects(); for (IJavaProject p : jp) { @@ -40,6 +41,7 @@ public class Main implements IApplication { return null; } + @Override public void stop() { } } diff --git a/com.ibm.wala.ide.tests/src/com/ibm/wala/examples/drivers/SWTTypeHierarchy.java b/com.ibm.wala.ide.tests/src/com/ibm/wala/examples/drivers/SWTTypeHierarchy.java index 52a42fe7f..78edbb101 100644 --- a/com.ibm.wala.ide.tests/src/com/ibm/wala/examples/drivers/SWTTypeHierarchy.java +++ b/com.ibm.wala.ide.tests/src/com/ibm/wala/examples/drivers/SWTTypeHierarchy.java @@ -107,6 +107,7 @@ public class SWTTypeHierarchy { */ static Graph pruneForAppLoader(Graph g) throws WalaException { Filter f = new Filter() { + @Override public boolean accepts(IClass c) { return (c.getClassLoader().getReference().equals(ClassLoaderReference.Application)); } diff --git a/com.ibm.wala.ide.tests/src/com/ibm/wala/ide/test/Activator.java b/com.ibm.wala.ide.tests/src/com/ibm/wala/ide/test/Activator.java index ba7c0803f..b8a7b423e 100644 --- a/com.ibm.wala.ide.tests/src/com/ibm/wala/ide/test/Activator.java +++ b/com.ibm.wala.ide.tests/src/com/ibm/wala/ide/test/Activator.java @@ -62,6 +62,7 @@ public class Activator extends Plugin { * * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext) */ + @Override public void start(BundleContext context) throws Exception { super.start(context); plugin = this; @@ -72,6 +73,7 @@ public class Activator extends Plugin { * * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext) */ + @Override public void stop(BundleContext context) throws Exception { plugin = null; super.stop(context); diff --git a/com.ibm.wala.ide.tests/src/com/ibm/wala/ide/tests/util/EclipseTestUtil.java b/com.ibm.wala.ide.tests/src/com/ibm/wala/ide/tests/util/EclipseTestUtil.java index 71e9cfc05..d03518881 100644 --- a/com.ibm.wala.ide.tests/src/com/ibm/wala/ide/tests/util/EclipseTestUtil.java +++ b/com.ibm.wala.ide.tests/src/com/ibm/wala/ide/tests/util/EclipseTestUtil.java @@ -87,6 +87,7 @@ public class EclipseTestUtil { IPath containerPath = getWorkspacePath().append(projectName).addTrailingSeparator(); ImportOperation importOp = new ImportOperation(containerPath, provider.getRoot(), provider, new IOverwriteQuery() { + @Override public String queryOverwrite(String pathString) { return IOverwriteQuery.ALL; } diff --git a/com.ibm.wala.ide/src/com/ibm/wala/ide/classloader/EclipseSourceFileModule.java b/com.ibm.wala.ide/src/com/ibm/wala/ide/classloader/EclipseSourceFileModule.java index a364b5dc1..b73a1ec25 100644 --- a/com.ibm.wala.ide/src/com/ibm/wala/ide/classloader/EclipseSourceFileModule.java +++ b/com.ibm.wala.ide/src/com/ibm/wala/ide/classloader/EclipseSourceFileModule.java @@ -31,7 +31,7 @@ public class EclipseSourceFileModule extends SourceFileModule { } private EclipseSourceFileModule(IFile f) { - super(new File(f.getLocation().toOSString()),f.getLocation().lastSegment()); + super(new File(f.getLocation().toOSString()),f.getLocation().lastSegment(), null); this.f = f; } public IFile getIFile() { diff --git a/com.ibm.wala.ide/src/com/ibm/wala/ide/client/EclipseProjectAnalysisEngine.java b/com.ibm.wala.ide/src/com/ibm/wala/ide/client/EclipseProjectAnalysisEngine.java index ac97194ff..80f84daf2 100644 --- a/com.ibm.wala.ide/src/com/ibm/wala/ide/client/EclipseProjectAnalysisEngine.java +++ b/com.ibm.wala.ide/src/com/ibm/wala/ide/client/EclipseProjectAnalysisEngine.java @@ -45,6 +45,7 @@ abstract public class EclipseProjectAnalysisEngine

    extends AbstractAnalysisEn abstract protected EclipseProjectPath createProjectPath(P project) throws IOException, CoreException; + @Override abstract protected CallGraphBuilder getCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options, AnalysisCache cache); abstract protected AnalysisScope makeAnalysisScope(); diff --git a/com.ibm.wala.ide/src/com/ibm/wala/ide/client/EclipseProjectSourceAnalysisEngine.java b/com.ibm.wala.ide/src/com/ibm/wala/ide/client/EclipseProjectSourceAnalysisEngine.java index 660f710ec..4f9f00747 100644 --- a/com.ibm.wala.ide/src/com/ibm/wala/ide/client/EclipseProjectSourceAnalysisEngine.java +++ b/com.ibm.wala.ide/src/com/ibm/wala/ide/client/EclipseProjectSourceAnalysisEngine.java @@ -61,6 +61,7 @@ abstract public class EclipseProjectSourceAnalysisEngine

    extends EclipseProje * we don't provide a default implementation of this method to avoid * introducing a dependence on com.ibm.wala.cast from this project */ + @Override public abstract AnalysisCache makeDefaultCache(); protected abstract ClassLoaderReference getSourceLoader(); @@ -71,6 +72,7 @@ abstract public class EclipseProjectSourceAnalysisEngine

    extends EclipseProje SSAOptions ssaOptions = new SSAOptions(); ssaOptions.setDefaultValues(new SSAOptions.DefaultValues() { + @Override public int getDefaultValue(SymbolTable symtab, int valueNumber) { return symtab.getDefaultValue(valueNumber); } diff --git a/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/SWTTreeViewer.java b/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/SWTTreeViewer.java index ff8cebdbd..fe33fc903 100644 --- a/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/SWTTreeViewer.java +++ b/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/SWTTreeViewer.java @@ -109,6 +109,7 @@ public class SWTTreeViewer extends AbstractJFaceRunner { // run the code on the UI thread Display d = PlatformUI.getWorkbench().getDisplay(); Runnable r = new Runnable() { + @Override public void run() { try { w.open(); @@ -130,6 +131,7 @@ public class SWTTreeViewer extends AbstractJFaceRunner { Display.getCurrent().dispose(); } else { Runnable r = new Runnable() { + @Override public void run() { w.open(); Display.getCurrent().dispose(); @@ -218,6 +220,7 @@ public class SWTTreeViewer extends AbstractJFaceRunner { /* * @see org.eclipse.jface.viewers.IContentProvider#dispose() */ + @Override public void dispose() { // do nothing for now } @@ -226,6 +229,7 @@ public class SWTTreeViewer extends AbstractJFaceRunner { * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, * java.lang.Object, java.lang.Object) */ + @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { // for now do nothing, since we're not dealing with listeners } @@ -233,6 +237,7 @@ public class SWTTreeViewer extends AbstractJFaceRunner { /* * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object) */ + @Override public Object[] getChildren(Object parentElement) { Object[] result = new Object[graph.getSuccNodeCount(parentElement)]; @@ -246,6 +251,7 @@ public class SWTTreeViewer extends AbstractJFaceRunner { /* * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object) */ + @Override public Object getParent(Object element) { // TODO Auto-generated method stub Assertions.UNREACHABLE(); @@ -255,6 +261,7 @@ public class SWTTreeViewer extends AbstractJFaceRunner { /* * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object) */ + @Override public boolean hasChildren(Object element) { return graph.getSuccNodeCount(element) > 0; } @@ -262,6 +269,7 @@ public class SWTTreeViewer extends AbstractJFaceRunner { /* * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) */ + @Override public Object[] getElements(Object inputElement) { Collection roots = getRootsInput(); Assertions.productionAssertion(roots != null); diff --git a/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/ViewIFDSLocalAction.java b/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/ViewIFDSLocalAction.java index 7a7a6a800..3d3d1eae4 100644 --- a/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/ViewIFDSLocalAction.java +++ b/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/ViewIFDSLocalAction.java @@ -108,6 +108,7 @@ public class ViewIFDSLocalAction extends Action { this.result = result; } + @Override @SuppressWarnings("unchecked") public String getLabel(Object o) throws WalaException { T t = (T) o; @@ -176,6 +177,7 @@ public class ViewIFDSLocalAction extends Action { try { final P proc = getProcedureForSelection(); Filter filter = new Filter() { + @Override public boolean accepts(T o) { return supergraph.getProcOf(o).equals(proc); } diff --git a/com.ibm.wala.ide/src/com/ibm/wala/ide/util/EclipseProjectPath.java b/com.ibm.wala.ide/src/com/ibm/wala/ide/util/EclipseProjectPath.java index f37b3e0f3..fa7beb106 100644 --- a/com.ibm.wala.ide/src/com/ibm/wala/ide/util/EclipseProjectPath.java +++ b/com.ibm.wala.ide/src/com/ibm/wala/ide/util/EclipseProjectPath.java @@ -88,6 +88,7 @@ public abstract class EclipseProjectPath { this.ref = ref; } + @Override public ClassLoaderReference ref() { return ref; } diff --git a/com.ibm.wala.ide/src/com/ibm/wala/ide/util/HeadlessUtil.java b/com.ibm.wala.ide/src/com/ibm/wala/ide/util/HeadlessUtil.java index 043446130..0e52c6643 100644 --- a/com.ibm.wala.ide/src/com/ibm/wala/ide/util/HeadlessUtil.java +++ b/com.ibm.wala.ide/src/com/ibm/wala/ide/util/HeadlessUtil.java @@ -104,6 +104,7 @@ public class HeadlessUtil { for (final Map.Entry> proj : projectsFiles.entrySet()) { parser.setProject(proj.getKey()); parser.processASTs(proj.getValue(), new Function() { + @Override public Boolean apply(Object[] problems) { int length = problems.length; if (length > 0) { diff --git a/com.ibm.wala.ide/src/com/ibm/wala/ide/util/ProgressMonitorDelegate.java b/com.ibm.wala.ide/src/com/ibm/wala/ide/util/ProgressMonitorDelegate.java index 4ceb30041..072f00da2 100644 --- a/com.ibm.wala.ide/src/com/ibm/wala/ide/util/ProgressMonitorDelegate.java +++ b/com.ibm.wala.ide/src/com/ibm/wala/ide/util/ProgressMonitorDelegate.java @@ -30,19 +30,23 @@ public class ProgressMonitorDelegate implements IProgressMonitor { this.delegate = d; } + @Override public void beginTask(String task, int totalWork) { delegate.beginTask(task, totalWork); } + @Override public boolean isCanceled() { return delegate.isCanceled(); } + @Override public void done() { delegate.done(); } + @Override public void worked(int units) { delegate.worked(units); } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrike/copywriter/CopyWriter.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrike/copywriter/CopyWriter.java index c517ddba7..1deaa3f87 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrike/copywriter/CopyWriter.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrike/copywriter/CopyWriter.java @@ -95,6 +95,7 @@ public class CopyWriter { instrumenter = new OfflineInstrumenter(); instrumenter.setManifestBuilder(new OfflineInstrumenter.ManifestBuilder() { + @Override public void addEntry(ZipEntry ze) { entries.add(ze); } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ArrayLengthInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ArrayLengthInstruction.java index 89019b559..276dca550 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ArrayLengthInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ArrayLengthInstruction.java @@ -59,6 +59,7 @@ final public class ArrayLengthInstruction extends Instruction { return "ArrayLength()"; } + @Override public boolean isPEI() { return true; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ArrayLoadInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ArrayLoadInstruction.java index c4725dab4..9bd000b87 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ArrayLoadInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ArrayLoadInstruction.java @@ -90,6 +90,7 @@ final public class ArrayLoadInstruction extends Instruction implements IArrayLoa return Util.getWordSize(getType()); } + @Override public String getType() { return Constants.indexedTypes[opcode - OP_iaload]; } @@ -99,6 +100,7 @@ final public class ArrayLoadInstruction extends Instruction implements IArrayLoa v.visitArrayLoad(this); } + @Override public boolean isPEI() { return true; } @@ -107,6 +109,7 @@ final public class ArrayLoadInstruction extends Instruction implements IArrayLoa * Java bytecode does not permit this. * @see com.ibm.wala.shrikeBT.IMemoryOperation#isAddressOf() */ + @Override public boolean isAddressOf() { return false; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ArrayStoreInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ArrayStoreInstruction.java index b2de46772..e91bda969 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ArrayStoreInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ArrayStoreInstruction.java @@ -57,6 +57,7 @@ final public class ArrayStoreInstruction extends Instruction implements IArraySt return 3; } + @Override public String getType() { return Decoder.indexedTypes[opcode - OP_iastore]; } @@ -71,6 +72,7 @@ final public class ArrayStoreInstruction extends Instruction implements IArraySt v.visitArrayStore(this); } + @Override public boolean isPEI() { return true; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/BinaryOpInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/BinaryOpInstruction.java index 5db0f757b..c67fdba77 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/BinaryOpInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/BinaryOpInstruction.java @@ -70,6 +70,7 @@ final public class BinaryOpInstruction extends Instruction implements IBinaryOpI } } + @Override public Operator getOperator() { if (opcode < OP_iand) { // For these opcodes, there are 4 variants (i,l,f,d) @@ -101,6 +102,7 @@ final public class BinaryOpInstruction extends Instruction implements IBinaryOpI return Util.getWordSize(getType()); } + @Override public String getType() { int t; if (opcode < OP_iand) { @@ -121,14 +123,17 @@ final public class BinaryOpInstruction extends Instruction implements IBinaryOpI return "BinaryOp(" + getType() + "," + getOperator() + ")"; } + @Override public boolean isPEI() { return opcode == Constants.OP_idiv || opcode == Constants.OP_ldiv || opcode == Constants.OP_irem || opcode == Constants.OP_lrem; } + @Override public boolean throwsExceptionOnOverflow() { return false; } + @Override public boolean isUnsigned() { return false; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/CheckCastInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/CheckCastInstruction.java index b12c341fe..1e46b26e5 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/CheckCastInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/CheckCastInstruction.java @@ -51,6 +51,7 @@ final public class CheckCastInstruction extends Instruction implements ITypeTest /** * @return the type to which the operand is cast */ + @Override public String[] getTypes() { return new String[]{ type }; } @@ -78,10 +79,12 @@ final public class CheckCastInstruction extends Instruction implements ITypeTest return "CheckCast(" + type + ")"; } + @Override public boolean isPEI() { return true; } + @Override public boolean firstClassTypes() { return false; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ComparisonInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ComparisonInstruction.java index 8f0d856aa..a35585d56 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ComparisonInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ComparisonInstruction.java @@ -64,6 +64,7 @@ final public class ComparisonInstruction extends Instruction implements ICompari /** * @return OPR_cmp (for long), OPR_cmpl, or OPR_cmpg (for float and double) */ + @Override public Operator getOperator() { switch (opcode) { case OP_lcmp: @@ -79,6 +80,7 @@ final public class ComparisonInstruction extends Instruction implements ICompari } } + @Override public String getType() { switch (opcode) { case OP_lcmp: @@ -124,6 +126,7 @@ final public class ComparisonInstruction extends Instruction implements ICompari return "Comparison(" + getType() + "," + getOperator() + ")"; } + @Override public boolean isPEI() { return false; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ConditionalBranchInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ConditionalBranchInstruction.java index 7eaadcf7b..0e4c3f33f 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ConditionalBranchInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ConditionalBranchInstruction.java @@ -73,6 +73,7 @@ public final class ConditionalBranchInstruction extends Instruction implements I return r; } + @Override public int getTarget() { return label; } @@ -89,6 +90,7 @@ public final class ConditionalBranchInstruction extends Instruction implements I } } + @Override public Operator getOperator() { if (opcode < OP_if_acmpeq) { return Operator.values()[opcode - OP_if_icmpeq]; @@ -97,6 +99,7 @@ public final class ConditionalBranchInstruction extends Instruction implements I } } + @Override public String getType() { return opcode < OP_if_acmpeq ? TYPE_int : TYPE_Object; } @@ -119,6 +122,7 @@ public final class ConditionalBranchInstruction extends Instruction implements I v.visitConditionalBranch(this); } + @Override public boolean isPEI() { return false; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ConstantInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ConstantInstruction.java index 8fd447e55..e9ef8552e 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ConstantInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ConstantInstruction.java @@ -660,6 +660,7 @@ public abstract class ConstantInstruction extends Instruction { return "Constant(" + getType() + "," + quote(getValue()) + ")"; } + @Override public boolean isPEI() { return false; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ConversionInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ConversionInstruction.java index 0561567e9..4569f5fae 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ConversionInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ConversionInstruction.java @@ -69,6 +69,7 @@ public final class ConversionInstruction extends Instruction implements IConvers return 1; } + @Override public String getFromType() { return fromType; } @@ -77,6 +78,7 @@ public final class ConversionInstruction extends Instruction implements IConvers return a < b ? a : a + 1; } + @Override public String getToType() { return toType; } @@ -116,10 +118,12 @@ public final class ConversionInstruction extends Instruction implements IConvers v.visitConversion(this); } + @Override public boolean isPEI() { return false; } + @Override public boolean throwsExceptionOnOverflow() { return false; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/DupInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/DupInstruction.java index a5d4822a1..19a5a18a1 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/DupInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/DupInstruction.java @@ -105,6 +105,7 @@ public final class DupInstruction extends Instruction { v.visitDup(this); } + @Override public boolean isPEI() { return false; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/GetInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/GetInstruction.java index c5c25b662..382b1fa96 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/GetInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/GetInstruction.java @@ -104,18 +104,22 @@ public class GetInstruction extends Instruction implements IGetInstruction { } } + @Override public String getClassType() { return classType; } + @Override public String getFieldName() { return fieldName; } + @Override public String getFieldType() { return type; } + @Override final public boolean isStatic() { return opcode == OP_getstatic; } @@ -154,6 +158,7 @@ public class GetInstruction extends Instruction implements IGetInstruction { v.visitGet(this); } + @Override public boolean isPEI() { return !isStatic(); } @@ -161,6 +166,7 @@ public class GetInstruction extends Instruction implements IGetInstruction { /** * Java does not permit this */ + @Override public boolean isAddressOf() { return false; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/GotoInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/GotoInstruction.java index f7c513091..187099de1 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/GotoInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/GotoInstruction.java @@ -94,6 +94,7 @@ public final class GotoInstruction extends Instruction { v.visitGoto(this); } + @Override public boolean isPEI() { return false; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/IInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/IInstruction.java index c50b8d34d..d32b57e46 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/IInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/IInstruction.java @@ -149,6 +149,7 @@ public interface IInstruction { /** * Subclasses must implement toString. */ + @Override public String toString(); /** diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/IInvokeInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/IInvokeInstruction.java index 7cd60989d..7469e1c45 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/IInvokeInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/IInvokeInstruction.java @@ -42,6 +42,7 @@ public interface IInvokeInstruction extends IInstruction { } }; + @Override public boolean hasImplicitThis() { return true; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/InstanceofInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/InstanceofInstruction.java index f9c58db2b..d9413edbb 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/InstanceofInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/InstanceofInstruction.java @@ -48,6 +48,7 @@ public final class InstanceofInstruction extends Instruction implements IInstanc return 1; } + @Override public String getType() { return type; } @@ -75,10 +76,12 @@ public final class InstanceofInstruction extends Instruction implements IInstanc return "Instanceof(" + type + ")"; } + @Override public boolean isPEI() { return false; } + @Override public boolean firstClassType() { return false; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/Instruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/Instruction.java index 84c5b7a21..398e747bd 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/Instruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/Instruction.java @@ -54,6 +54,7 @@ public abstract class Instruction implements Constants, Cloneable, IInstruction /** * @return true if the instruction can "fall through" to the following instruction */ + @Override public boolean isFallThrough() { return true; } @@ -62,6 +63,7 @@ public abstract class Instruction implements Constants, Cloneable, IInstruction * @return an array containing the labels this instruction can branch to (not including the following instruction if this * instruction 'falls through') */ + @Override public int[] getBranchTargets() { return noInstructions; } @@ -69,6 +71,7 @@ public abstract class Instruction implements Constants, Cloneable, IInstruction /** * @return an Instruction equivalent to this one but with any branch labels updated by looking them up in the targetMap array */ + @Override public IInstruction redirectTargets(int[] targetMap) { return this; } @@ -76,6 +79,7 @@ public abstract class Instruction implements Constants, Cloneable, IInstruction /** * @return the number of values this instruction pops off the working stack */ + @Override public int getPoppedCount() { return 0; } @@ -93,6 +97,7 @@ public abstract class Instruction implements Constants, Cloneable, IInstruction * @param poppedTypesToCheck the types of the data popped off the stack by this instruction; if poppedTypes is null, then we don't * know the incoming stack types and the result of this method may be less accurate */ + @Override public String getPushedType(String[] poppedTypesToCheck) { return null; } @@ -101,6 +106,7 @@ public abstract class Instruction implements Constants, Cloneable, IInstruction * @return the JVM word size of the value this instruction pushes onto the stack, or 0 if this instruction doesn't push anything * onto the stack. */ + @Override public byte getPushedWordSize() { return 0; } @@ -108,6 +114,7 @@ public abstract class Instruction implements Constants, Cloneable, IInstruction /** * Apply a Visitor to this instruction. We invoke the appropriate Visitor method according to the type of this instruction. */ + @Override public abstract void visit(IInstruction.Visitor v); /** diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/InvokeInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/InvokeInstruction.java index 5e291ff88..e75978635 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/InvokeInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/InvokeInstruction.java @@ -127,14 +127,17 @@ public class InvokeInstruction extends Instruction implements IInvokeInstruction } } + @Override public String getClassType() { return classType; } + @Override public String getMethodName() { return methodName; } + @Override public String getMethodSignature() { return type; } @@ -195,10 +198,12 @@ public class InvokeInstruction extends Instruction implements IInvokeInstruction return "Invoke(" + getInvocationModeString() + "," + getClassType() + "," + getMethodName() + "," + getMethodSignature() + ")"; } + @Override public boolean isPEI() { return true; } + @Override public Dispatch getInvocationCode() { switch (opcode) { case Constants.OP_invokestatic: diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/LoadInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/LoadInstruction.java index cc950dc35..8189ab227 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/LoadInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/LoadInstruction.java @@ -51,10 +51,12 @@ public final class LoadInstruction extends Instruction implements ILoadInstructi /** * @return the index of the local variable loaded */ + @Override public int getVarIndex() { return index; } + @Override public String getType() { if (opcode < OP_iload_0) { return indexedTypes[opcode - OP_iload]; @@ -98,6 +100,7 @@ public final class LoadInstruction extends Instruction implements ILoadInstructi return "LocalLoad(" + getType() + "," + index + ")"; } + @Override public boolean isPEI() { return false; } @@ -106,6 +109,7 @@ public final class LoadInstruction extends Instruction implements ILoadInstructi * Java does not permit this. * @see com.ibm.wala.shrikeBT.IMemoryOperation#isAddressOf() */ + @Override public boolean isAddressOf() { return false; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/MonitorInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/MonitorInstruction.java index bda34c9c6..a85838fd4 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/MonitorInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/MonitorInstruction.java @@ -63,6 +63,7 @@ public final class MonitorInstruction extends Instruction { return "Monitor(" + (isEnter() ? "ENTER" : "EXIT") + ")"; } + @Override public boolean isPEI() { return true; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/NewInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/NewInstruction.java index 3df1885c9..5d2e8c680 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/NewInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/NewInstruction.java @@ -113,6 +113,7 @@ public final class NewInstruction extends Instruction { v.visitNew(this); } + @Override public boolean isPEI() { return true; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/PopInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/PopInstruction.java index 8865bd33d..ef939415f 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/PopInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/PopInstruction.java @@ -65,6 +65,7 @@ public final class PopInstruction extends Instruction { return "Pop(" + size + ")"; } + @Override public boolean isPEI() { return false; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/PutInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/PutInstruction.java index 897b19c54..14b1f3438 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/PutInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/PutInstruction.java @@ -104,18 +104,22 @@ public class PutInstruction extends Instruction implements IPutInstruction { } } + @Override public String getClassType() { return classType; } + @Override public String getFieldType() { return type; } + @Override public String getFieldName() { return fieldName; } + @Override final public boolean isStatic() { return opcode == OP_putstatic; } @@ -141,6 +145,7 @@ public class PutInstruction extends Instruction implements IPutInstruction { v.visitPut(this); } + @Override public boolean isPEI() { return !isStatic(); } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ReturnInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ReturnInstruction.java index 28ef30b6b..c38eb8fdd 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ReturnInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ReturnInstruction.java @@ -84,6 +84,7 @@ public final class ReturnInstruction extends Instruction { return "Return(" + getType() + ")"; } + @Override public boolean isPEI() { return false; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ShiftInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ShiftInstruction.java index a57c50200..2f2ed98cd 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ShiftInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ShiftInstruction.java @@ -51,6 +51,7 @@ public final class ShiftInstruction extends Instruction implements IShiftInstruc } } + @Override public Operator getOperator() { return Operator.values()[(opcode - OP_ishl) / 2]; } @@ -75,6 +76,7 @@ public final class ShiftInstruction extends Instruction implements IShiftInstruc return Util.getWordSize(getType()); } + @Override public String getType() { return indexedTypes[(opcode - OP_ishl) & 1]; } @@ -89,10 +91,12 @@ public final class ShiftInstruction extends Instruction implements IShiftInstruc return "Shift(" + getType() + "," + getOperator() + ")"; } + @Override public boolean isPEI() { return false; } + @Override public boolean isUnsigned() { return false; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/StoreInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/StoreInstruction.java index d88b4e0a8..4f3f107e9 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/StoreInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/StoreInstruction.java @@ -51,10 +51,12 @@ public final class StoreInstruction extends Instruction implements IStoreInstruc /** * @return the index of the local variable stored */ + @Override public int getVarIndex() { return index; } + @Override public String getType() { if (opcode < OP_istore_0) { return indexedTypes[opcode - OP_istore]; @@ -93,6 +95,7 @@ public final class StoreInstruction extends Instruction implements IStoreInstruc v.visitLocalStore(this); } + @Override public boolean isPEI() { return false; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/SwapInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/SwapInstruction.java index 8d7d6e30b..7eafd4988 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/SwapInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/SwapInstruction.java @@ -53,6 +53,7 @@ public final class SwapInstruction extends Instruction { v.visitSwap(this); } + @Override public boolean isPEI() { return false; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/SwitchInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/SwitchInstruction.java index 8e5a1b52c..f38aa33b6 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/SwitchInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/SwitchInstruction.java @@ -147,6 +147,7 @@ public final class SwitchInstruction extends Instruction { v.visitSwitch(this); } + @Override public boolean isPEI() { return false; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ThrowInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ThrowInstruction.java index 3d334bd24..2f37950c4 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ThrowInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ThrowInstruction.java @@ -70,6 +70,7 @@ public final class ThrowInstruction extends Instruction { return "Throw()"; } + @Override public boolean isPEI() { return true; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/UnaryOpInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/UnaryOpInstruction.java index 7b3cbcaf0..a119eb987 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/UnaryOpInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/UnaryOpInstruction.java @@ -46,6 +46,7 @@ public final class UnaryOpInstruction extends Instruction implements IUnaryOpIns } } + @Override public IUnaryOpInstruction.Operator getOperator() { return IUnaryOpInstruction.Operator.NEG; } @@ -70,6 +71,7 @@ public final class UnaryOpInstruction extends Instruction implements IUnaryOpIns return Util.getWordSize(getType()); } + @Override public String getType() { return indexedTypes[opcode - OP_ineg]; } @@ -84,6 +86,7 @@ public final class UnaryOpInstruction extends Instruction implements IUnaryOpIns return "UnaryOp(" + getType() + "," + getOperator() + ")"; } + @Override public boolean isPEI() { return false; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/analysis/ClassHierarchyStore.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/analysis/ClassHierarchyStore.java index c5028f497..969fcfd68 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/analysis/ClassHierarchyStore.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/analysis/ClassHierarchyStore.java @@ -81,6 +81,7 @@ public final class ClassHierarchyStore implements ClassHierarchyProvider { /** * @see ClassHierarchyProvider#getSuperClass(String) */ + @Override public String getSuperClass(String cl) { ClassInfo info = contents.get(cl); return info == null ? null : info.superClass; @@ -89,6 +90,7 @@ public final class ClassHierarchyStore implements ClassHierarchyProvider { /* * @see ClassHierarchyProvider#getSuperInterfaces(String) */ + @Override public String[] getSuperInterfaces(String cl) { ClassInfo info = contents.get(cl); return info == null ? null : info.superInterfaces; @@ -97,6 +99,7 @@ public final class ClassHierarchyStore implements ClassHierarchyProvider { /* * @see ClassHierarchyProvider#getSubClasses(String) */ + @Override public String[] getSubClasses(String cl) { ClassInfo info = contents.get(cl); return (info == null || !info.isFinal) ? null : noClasses; @@ -105,6 +108,7 @@ public final class ClassHierarchyStore implements ClassHierarchyProvider { /* * @see ClassHierarchyProvider#isInterface(String) */ + @Override public int isInterface(String cl) { ClassInfo info = contents.get(cl); return info == null ? Constants.MAYBE : (info.isInterface ? Constants.YES : Constants.NO); diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/InstructionTypeCounter.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/InstructionTypeCounter.java index f60c72c8b..03a01118b 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/InstructionTypeCounter.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/InstructionTypeCounter.java @@ -275,6 +275,7 @@ public class InstructionTypeCounter implements MethodData.Results { * * This is not to be called by clients. */ + @Override public boolean notifyUpdate(MethodData info, IInstruction[] newInstructions, ExceptionHandler[][] newHandlers, int[] newInstructionMap) { // just throw this away and we'll recalculate from scratch if necessary diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/LocalAllocator.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/LocalAllocator.java index 39e5c498c..35071c4ff 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/LocalAllocator.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/LocalAllocator.java @@ -68,6 +68,7 @@ public class LocalAllocator implements MethodData.Results { /** * This should not be called by clients. */ + @Override public boolean notifyUpdate(MethodData info, IInstruction[] newInstructions, ExceptionHandler[][] newHandlers, int[] newInstructionMap) { return false; diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/ThisAssignmentChecker.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/ThisAssignmentChecker.java index 6631e3831..21d0d3374 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/ThisAssignmentChecker.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/ThisAssignmentChecker.java @@ -48,6 +48,7 @@ public class ThisAssignmentChecker implements MethodData.Results { /** * This should not be called by any client. */ + @Override public boolean notifyUpdate(MethodData info, IInstruction[] newInstructions, ExceptionHandler[][] newHandlers, int[] newInstructionMap) { // just throw this away and we'll recalculate from scratch if necessary diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/tools/AddSerialVersion.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/tools/AddSerialVersion.java index 119d3c677..154b9332f 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/tools/AddSerialVersion.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/tools/AddSerialVersion.java @@ -118,6 +118,7 @@ public class AddSerialVersion { } } Arrays.sort(fields, 0, fieldCount, new Comparator() { + @Override public int compare(Integer o1, Integer o2) { String name1 = fieldNames[o1.intValue()]; String name2 = fieldNames[o2.intValue()]; @@ -153,6 +154,7 @@ public class AddSerialVersion { } } Arrays.sort(methods, 0, methodCount, new Comparator() { + @Override public int compare(Integer o1, Integer o2) { int m1 = o1.intValue(); int m2 = o2.intValue(); diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/tools/OfflineInstrumenterBase.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/tools/OfflineInstrumenterBase.java index ef2bfc861..2d16fda4a 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/tools/OfflineInstrumenterBase.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/tools/OfflineInstrumenterBase.java @@ -239,6 +239,7 @@ public abstract class OfflineInstrumenterBase { throw new IllegalArgumentException("d is null"); } File[] fs = d.listFiles(new FileFilter() { + @Override public boolean accept(File f) { return f.isDirectory() || f.getName().endsWith(".class"); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/BasicFramework.java b/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/BasicFramework.java index d7609b3e2..bc24e923a 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/BasicFramework.java +++ b/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/BasicFramework.java @@ -30,6 +30,7 @@ public class BasicFramework implements IKilldallFramewor /* * @see com.ibm.wala.dataflow.graph.IKilldallFramework#getFlowGraph() */ + @Override public Graph getFlowGraph() { return flowGraph; } @@ -37,6 +38,7 @@ public class BasicFramework implements IKilldallFramewor /* * @see com.ibm.wala.dataflow.graph.IKilldallFramework#getTransferFunctionMap() */ + @Override public ITransferFunctionProvider getTransferFunctionProvider() { return transferFunctionProvider; } diff --git a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/AbstractFixedPointSolver.java b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/AbstractFixedPointSolver.java index d5fe1dd4d..29def0776 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/AbstractFixedPointSolver.java +++ b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/AbstractFixedPointSolver.java @@ -127,6 +127,7 @@ public abstract class AbstractFixedPointSolver> implement * * @return true iff the evaluation of some equation caused a change in the value of some variable. */ + @Override @SuppressWarnings("unchecked") public boolean solve(IProgressMonitor monitor) throws CancelException { @@ -171,6 +172,7 @@ public abstract class AbstractFixedPointSolver> implement return globalChange; } + @Override public void performVerboseAction() { System.err.println("Evaluated " + nEvaluated); System.err.println("Created " + nCreated); diff --git a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSolver.java b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSolver.java index cace0111f..c2647c820 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSolver.java +++ b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSolver.java @@ -35,6 +35,7 @@ public abstract class DefaultFixedPointSolver> extends Ab graph = new DefaultFixedPointSystem(); } + @Override public IFixedPointSystem getFixedPointSystem() { return graph; } diff --git a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java index 825ce9b54..338319251 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java +++ b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java @@ -87,19 +87,23 @@ public class DefaultFixedPointSystem> implements IFixedPo return graph.toString(); } + @Override public void removeStatement(IFixedPointStatement s) { graph.removeNodeAndEdges(s); } + @Override @SuppressWarnings({ "unchecked", "rawtypes" }) public Iterator getStatements() { return new FilterIterator(graph.iterator(), new Filter() { + @Override public boolean accepts(Object x) { return x instanceof AbstractStatement; } }); } + @Override @SuppressWarnings("rawtypes") public void addStatement(IFixedPointStatement statement) throws IllegalArgumentException, UnimplementedError { if (statement == null) { @@ -197,6 +201,7 @@ public class DefaultFixedPointSystem> implements IFixedPo return (AbstractStatement) graph.getNode(number); } + @Override public void reorder() { if (DEBUG) { checkGraph(); @@ -226,10 +231,12 @@ public class DefaultFixedPointSystem> implements IFixedPo } } + @Override public Iterator getStatementsThatUse(T v) { return (graph.containsNode(v) ? graph.getSuccNodes(v) : EmptyIterator.instance()); } + @Override public Iterator getStatementsThatDef(T v) { return (graph.containsNode(v) ? graph.getPredNodes(v) : EmptyIterator.instance()); } @@ -239,16 +246,20 @@ public class DefaultFixedPointSystem> implements IFixedPo return (T) graph.getNode(n); } + @Override public int getNumberOfStatementsThatUse(T v) { return (graph.containsNode(v) ? graph.getSuccNodeCount(v) : 0); } + @Override public int getNumberOfStatementsThatDef(T v) { return (graph.containsNode(v) ? graph.getPredNodeCount(v) : 0); } + @Override public Iterator getVariables() { return new FilterIterator(graph.iterator(), new Filter() { + @Override public boolean accepts(T x) { return x instanceof IVariable; } @@ -268,10 +279,12 @@ public class DefaultFixedPointSystem> implements IFixedPo return graph.getPredNodeCount(n); } + @Override public boolean containsStatement(IFixedPointStatement s) { return equations.contains(s); } + @Override public boolean containsVariable(T v) { return variables.contains(v); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/GeneralStatement.java b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/GeneralStatement.java index f60f98717..0cfbfb06b 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/GeneralStatement.java +++ b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/GeneralStatement.java @@ -32,6 +32,7 @@ public abstract class GeneralStatement> extends AbstractS * * @return true if the lhs value changed. false otherwise */ + @Override public byte evaluate() { return operator.evaluate(lhs, rhs); } @@ -41,6 +42,7 @@ public abstract class GeneralStatement> extends AbstractS * * @return the lattice cell this equation computes */ + @Override public T getLHS() { return lhs; } @@ -54,6 +56,7 @@ public abstract class GeneralStatement> extends AbstractS * @param cell the cell in question * @return true or false */ + @Override public boolean hasVariable(T cell) { if (lhs == cell) { return true; @@ -209,6 +212,7 @@ public abstract class GeneralStatement> extends AbstractS return operator; } + @Override public T[] getRHS() { return rhs; } diff --git a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/NullaryStatement.java b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/NullaryStatement.java index 19703db87..af342b542 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/NullaryStatement.java +++ b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/NullaryStatement.java @@ -31,6 +31,7 @@ public abstract class NullaryStatement extends AbstractStat * * @return true if the lhs value changed. false otherwise */ + @Override public byte evaluate() { NullaryOperator op = getOperator(); return op.evaluate(lhs); @@ -41,6 +42,7 @@ public abstract class NullaryStatement extends AbstractStat * * @return the lattice cell this equation computes */ + @Override public T getLHS() { return lhs; } @@ -50,6 +52,7 @@ public abstract class NullaryStatement extends AbstractStat * @param cell the cell in question * @return true or false */ + @Override public boolean hasVariable(T cell) { return lhs == cell; } @@ -99,6 +102,7 @@ public abstract class NullaryStatement extends AbstractStat return result; } + @Override public T[] getRHS() throws UnsupportedOperationException { throw new UnsupportedOperationException(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/fixpoint/AbstractVariable.java b/com.ibm.wala.util/src/com/ibm/wala/fixpoint/AbstractVariable.java index d74678ca4..d34213f07 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/fixpoint/AbstractVariable.java +++ b/com.ibm.wala.util/src/com/ibm/wala/fixpoint/AbstractVariable.java @@ -52,10 +52,12 @@ public abstract class AbstractVariable extends NodeW return hashCode; } + @Override public int getOrderNumber() { return orderNumber; } + @Override public void setOrderNumber(int orderNumber) { this.orderNumber = orderNumber; } diff --git a/com.ibm.wala.util/src/com/ibm/wala/fixpoint/BitVectorVariable.java b/com.ibm.wala.util/src/com/ibm/wala/fixpoint/BitVectorVariable.java index 4956e8377..9b6826792 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/fixpoint/BitVectorVariable.java +++ b/com.ibm.wala.util/src/com/ibm/wala/fixpoint/BitVectorVariable.java @@ -28,6 +28,7 @@ public class BitVectorVariable extends AbstractVariable { /* * @see com.ibm.wala.fixpoint.IVariable#copyState(com.ibm.wala.fixpoint.IVariable) */ + @Override public void copyState(BitVectorVariable other) { if (other == null) { throw new IllegalArgumentException("null other"); diff --git a/com.ibm.wala.util/src/com/ibm/wala/fixpoint/BooleanVariable.java b/com.ibm.wala.util/src/com/ibm/wala/fixpoint/BooleanVariable.java index 2bd4e9059..9237b38ee 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/fixpoint/BooleanVariable.java +++ b/com.ibm.wala.util/src/com/ibm/wala/fixpoint/BooleanVariable.java @@ -28,6 +28,7 @@ public class BooleanVariable extends AbstractVariable { this.B = b; } + @Override public void copyState(BooleanVariable other) { if (other == null) { throw new IllegalArgumentException("other null"); diff --git a/com.ibm.wala.util/src/com/ibm/wala/fixpoint/IntSetVariable.java b/com.ibm.wala.util/src/com/ibm/wala/fixpoint/IntSetVariable.java index b76a74b0d..5955e6538 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/fixpoint/IntSetVariable.java +++ b/com.ibm.wala.util/src/com/ibm/wala/fixpoint/IntSetVariable.java @@ -24,6 +24,7 @@ public abstract class IntSetVariable extends AbstractV private MutableIntSet V; + @Override public void copyState(T other) { if (V == null) { if (other.V == null) { diff --git a/com.ibm.wala.util/src/com/ibm/wala/fixpoint/UnaryStatement.java b/com.ibm.wala.util/src/com/ibm/wala/fixpoint/UnaryStatement.java index 95ef48cc8..aa9439d61 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/fixpoint/UnaryStatement.java +++ b/com.ibm.wala.util/src/com/ibm/wala/fixpoint/UnaryStatement.java @@ -30,6 +30,7 @@ public abstract class UnaryStatement extends AbstractStatem * * @return true if the lhs value changed. false otherwise */ + @Override public byte evaluate() { UnaryOperator op = getOperator(); return op.evaluate(lhs, rhs); @@ -40,6 +41,7 @@ public abstract class UnaryStatement extends AbstractStatem * * @return the lattice cell this equation computes */ + @Override public T getLHS() { return lhs; } @@ -66,6 +68,7 @@ public abstract class UnaryStatement extends AbstractStatem * @param cell the cell in question * @return true or false */ + @Override public boolean hasVariable(T cell) { if (lhs == cell) return true; @@ -152,6 +155,7 @@ public abstract class UnaryStatement extends AbstractStatem return result; } + @Override public T[] getRHS() throws UnsupportedOperationException { // This should never be called ...use the more efficient getRightHandSide instead throw new UnsupportedOperationException(); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/ProgressMaster.java b/com.ibm.wala.util/src/com/ibm/wala/util/ProgressMaster.java index 511aca236..d246b671d 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/ProgressMaster.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/ProgressMaster.java @@ -44,6 +44,7 @@ public class ProgressMaster implements IProgressMonitor { return new ProgressMaster(monitor); } + @Override public synchronized void beginTask(String name, int totalWork) { delegate.beginTask(name, totalWork); startNanny(); @@ -72,6 +73,7 @@ public class ProgressMaster implements IProgressMonitor { return timedOut; } + @Override public synchronized void done() { killNanny(); delegate.done(); @@ -88,6 +90,7 @@ public class ProgressMaster implements IProgressMonitor { } } + @Override public boolean isCanceled() { return delegate.isCanceled() || timedOut; } @@ -96,6 +99,7 @@ public class ProgressMaster implements IProgressMonitor { killNanny(); } + @Override public synchronized void worked(int work) { killNanny(); delegate.worked(work); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/AbstractMultiMap.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/AbstractMultiMap.java index c1711aec6..ec483e96c 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/AbstractMultiMap.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/AbstractMultiMap.java @@ -60,6 +60,7 @@ abstract class AbstractMultiMap implements MultiMap { } + @Override public Set get(K key) { Set ret = map.get(key); if (ret == null) { @@ -78,6 +79,7 @@ abstract class AbstractMultiMap implements MultiMap { * * @see AAA.util.MultiMap#put(K, V) */ + @Override public boolean put(K key, V val) { Set vals = map.get(key); if (vals == null) { @@ -92,6 +94,7 @@ abstract class AbstractMultiMap implements MultiMap { * * @see AAA.util.MultiMap#remove(K, V) */ + @Override public boolean remove(K key, V val) { Set elems = map.get(key); if (elems == null) @@ -103,6 +106,7 @@ abstract class AbstractMultiMap implements MultiMap { return ret; } + @Override public Set removeAll(K key) { return map.remove(key); } @@ -112,6 +116,7 @@ abstract class AbstractMultiMap implements MultiMap { * * @see AAA.util.MultiMap#keys() */ + @Override public Set keySet() { return map.keySet(); } @@ -121,6 +126,7 @@ abstract class AbstractMultiMap implements MultiMap { * * @see AAA.util.MultiMap#containsKey(java.lang.Object) */ + @Override public boolean containsKey(K key) { return map.containsKey(key); } @@ -130,6 +136,7 @@ abstract class AbstractMultiMap implements MultiMap { * * @see AAA.util.MultiMap#size() */ + @Override public int size() { int ret = 0; for (K key : keySet()) { @@ -153,6 +160,7 @@ abstract class AbstractMultiMap implements MultiMap { * * @see AAA.util.MultiMap#putAll(K, java.util.Set) */ + @Override public boolean putAll(K key, Collection vals) { Set edges = map.get(key); if (edges == null) { @@ -162,10 +170,12 @@ abstract class AbstractMultiMap implements MultiMap { return edges.addAll(vals); } + @Override public void clear() { map.clear(); } + @Override public boolean isEmpty() { return map.isEmpty(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/ArrayIterator.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/ArrayIterator.java index 9f8b0e0eb..afa0cb471 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/ArrayIterator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/ArrayIterator.java @@ -76,10 +76,12 @@ public class ArrayIterator implements Iterator { this.last = last; } + @Override public boolean hasNext() { return _cnt <= last; } + @Override public T next() throws NoSuchElementException { if (_cnt >= _elts.length) { throw new NoSuchElementException(); @@ -87,6 +89,7 @@ public class ArrayIterator implements Iterator { return _elts[_cnt++]; } + @Override public void remove() throws UnsupportedOperationException { throw new UnsupportedOperationException(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/ArraySet.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/ArraySet.java index f604f4d30..43b9d1b74 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/ArraySet.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/ArraySet.java @@ -228,14 +228,17 @@ public class ArraySet extends AbstractSet { public ArraySetIterator() { } + @Override public void remove() { throw new UnsupportedOperationException(); } + @Override public boolean hasNext() { return ind < setSize; } + @Override public T next() { if (ind >= setSize) { throw new NoSuchElementException(); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/BimodalMap.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/BimodalMap.java index 701e3dc4e..16a2966e0 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/BimodalMap.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/BimodalMap.java @@ -44,6 +44,7 @@ public class BimodalMap implements Map { /* * @see java.util.Map#size() */ + @Override public int size() { return (backingStore == null) ? 0 : backingStore.size(); } @@ -51,6 +52,7 @@ public class BimodalMap implements Map { /* * @see java.util.Map#isEmpty() */ + @Override public boolean isEmpty() { return (backingStore == null) ? true : backingStore.isEmpty(); } @@ -58,6 +60,7 @@ public class BimodalMap implements Map { /* * @see java.util.Map#containsKey(java.lang.Object) */ + @Override public boolean containsKey(Object key) { return (backingStore == null) ? false : backingStore.containsKey(key); } @@ -65,6 +68,7 @@ public class BimodalMap implements Map { /* * @see java.util.Map#containsValue(java.lang.Object) */ + @Override public boolean containsValue(Object value) { return (backingStore == null) ? false : backingStore.containsValue(value); } @@ -72,6 +76,7 @@ public class BimodalMap implements Map { /* * @see java.util.Map#get(java.lang.Object) */ + @Override public V get(Object key) { return (backingStore == null) ? null : backingStore.get(key); } @@ -79,6 +84,7 @@ public class BimodalMap implements Map { /* * @see java.util.Map#put(java.lang.Object, java.lang.Object) */ + @Override public V put(K key, V value) { if (backingStore == null) { backingStore = new SmallMap(); @@ -114,6 +120,7 @@ public class BimodalMap implements Map { /** * @throws UnsupportedOperationException if the backingStore doesn't support remove */ + @Override public V remove(Object key) { return (backingStore == null) ? null : backingStore.remove(key); } @@ -121,6 +128,7 @@ public class BimodalMap implements Map { /* * @see java.util.Map#putAll(java.util.Map) */ + @Override @SuppressWarnings("unchecked") public void putAll(Map t) throws UnsupportedOperationException { if (t == null) { @@ -157,6 +165,7 @@ public class BimodalMap implements Map { /* * @see java.util.Map#clear() */ + @Override public void clear() { backingStore = null; } @@ -164,6 +173,7 @@ public class BimodalMap implements Map { /* * @see java.util.Map#keySet() */ + @Override @SuppressWarnings("unchecked") public Set keySet() { return (Set) ((backingStore == null) ? Collections.emptySet() : backingStore.keySet()); @@ -172,6 +182,7 @@ public class BimodalMap implements Map { /* * @see java.util.Map#values() */ + @Override @SuppressWarnings("unchecked") public Collection values() { return (Collection) ((backingStore == null) ? Collections.emptySet() : backingStore.values()); @@ -180,6 +191,7 @@ public class BimodalMap implements Map { /** * @throws UnimplementedError if the backingStore implementation does */ + @Override @SuppressWarnings("unchecked") public Set> entrySet() { return (Set>) ((backingStore == null) ? Collections.emptySet() : backingStore.entrySet()); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/CollectionFilter.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/CollectionFilter.java index b5f4d7b1d..feb63ebff 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/CollectionFilter.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/CollectionFilter.java @@ -31,6 +31,7 @@ public class CollectionFilter implements Filter { /* * @see com.ibm.wala.util.Filter#accepts(java.lang.Object) */ + @Override public boolean accepts(T o) { return S.contains(o); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/ComposedIterator.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/ComposedIterator.java index 56b46277c..04e76da8c 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/ComposedIterator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/ComposedIterator.java @@ -38,14 +38,17 @@ public abstract class ComposedIterator implements Iterator { public abstract Iterator makeInner(O outer); + @Override public void remove() throws UnsupportedOperationException{ throw new UnsupportedOperationException(); } + @Override public boolean hasNext() { return (inner != null); } + @Override public I next() { I result = inner.next(); if (!inner.hasNext()) { diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/CompoundIntIterator.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/CompoundIntIterator.java index 273890489..35e7a8dc0 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/CompoundIntIterator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/CompoundIntIterator.java @@ -40,11 +40,13 @@ public class CompoundIntIterator implements IntIterator { } + @Override public boolean hasNext() { return A.hasNext() || B.hasNext(); } + @Override public int next() { if (A.hasNext()) { return A.next(); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/CompoundIterator.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/CompoundIterator.java index ae59f965a..8ca0968ea 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/CompoundIterator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/CompoundIterator.java @@ -28,10 +28,12 @@ public class CompoundIterator implements Iterator { this.B = B; } + @Override public boolean hasNext() { return A.hasNext() || B.hasNext(); } + @Override public T next() throws NoSuchElementException { if (A.hasNext()) { return A.next(); @@ -43,6 +45,7 @@ public class CompoundIterator implements Iterator { /** * @see java.util.Iterator#remove() */ + @Override public void remove() { } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/EmptyIntIterator.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/EmptyIntIterator.java index 87f9b4a6c..f69e21399 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/EmptyIntIterator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/EmptyIntIterator.java @@ -32,10 +32,12 @@ public final class EmptyIntIterator implements IntIterator { private EmptyIntIterator() { } + @Override public boolean hasNext() { return false; } + @Override public int next() throws NoSuchElementException { throw new NoSuchElementException(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/EmptyIterator.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/EmptyIterator.java index 59138cebb..f053dbbed 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/EmptyIterator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/EmptyIterator.java @@ -33,14 +33,17 @@ public final class EmptyIterator implements Iterator { private EmptyIterator() { } + @Override public boolean hasNext() { return false; } + @Override public T next() { throw new NoSuchElementException(); } + @Override public void remove() throws UnsupportedOperationException { throw new UnsupportedOperationException(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/FilterIterator.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/FilterIterator.java index b935e4143..d96095532 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/FilterIterator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/FilterIterator.java @@ -58,6 +58,7 @@ public class FilterIterator implements java.util.Iterator { done = true; } + @Override public T next() throws NoSuchElementException { if (done) { throw new java.util.NoSuchElementException(); @@ -67,10 +68,12 @@ public class FilterIterator implements java.util.Iterator { return o; } + @Override public boolean hasNext() { return !done; } + @Override public void remove() throws UnsupportedOperationException { throw new java.lang.UnsupportedOperationException(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/Filtersection.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/Filtersection.java index 4c141bc86..5bac2669c 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/Filtersection.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/Filtersection.java @@ -30,6 +30,7 @@ public class Filtersection implements Filter { } } + @Override public boolean accepts(T o) { return a.accepts(o) && b.accepts(o); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/HashCodeComparator.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/HashCodeComparator.java index 0c85fe286..ed310f08b 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/HashCodeComparator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/HashCodeComparator.java @@ -23,6 +23,7 @@ public class HashCodeComparator implements Comparator { /* * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ + @Override public int compare(T o1, T o2) throws NullPointerException { // by convention null is less than non-null if (o1 == null) { diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/ImmutableStack.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/ImmutableStack.java index 60832aa22..f2a89ab22 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/ImmutableStack.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/ImmutableStack.java @@ -250,7 +250,8 @@ public class ImmutableStack implements Iterable { return new ImmutableStack(tmpEntries); } - public Iterator iterator() { + @Override + public Iterator iterator() { if (entries.length == 0) { return EmptyIterator.instance(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/IndiscriminateFilter.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/IndiscriminateFilter.java index 966f24f2e..7963e8320 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/IndiscriminateFilter.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/IndiscriminateFilter.java @@ -24,6 +24,7 @@ public class IndiscriminateFilter implements Filter { /* * @see com.ibm.wala.util.Filter#accepts(java.lang.Object) */ + @Override public boolean accepts(Object o) { return true; } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/IntMapIterator.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/IntMapIterator.java index 83d0f1fc5..441cf70e4 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/IntMapIterator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/IntMapIterator.java @@ -34,14 +34,17 @@ public class IntMapIterator implements Iterator { this.f = f; } + @Override public T next() { return f.apply(i.next()); } + @Override public boolean hasNext() { return i.hasNext(); } + @Override public void remove() throws UnsupportedOperationException { throw new java.lang.UnsupportedOperationException(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/Iterator2Collection.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/Iterator2Collection.java index b10c0036d..22ebc90df 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/Iterator2Collection.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/Iterator2Collection.java @@ -54,6 +54,7 @@ public abstract class Iterator2Collection implements Collection { /* * @see java.util.Collection#size() */ + @Override public int size() { return getDelegate().size(); } @@ -61,6 +62,7 @@ public abstract class Iterator2Collection implements Collection { /* * @see java.util.Collection#clear() */ + @Override public void clear() { getDelegate().clear(); } @@ -68,6 +70,7 @@ public abstract class Iterator2Collection implements Collection { /* * @see java.util.Collection#isEmpty() */ + @Override public boolean isEmpty() { return getDelegate().isEmpty(); } @@ -75,6 +78,7 @@ public abstract class Iterator2Collection implements Collection { /* * @see java.util.Collection#toArray() */ + @Override public Object[] toArray() { return getDelegate().toArray(); } @@ -82,6 +86,7 @@ public abstract class Iterator2Collection implements Collection { /* * @see java.util.Collection#add(java.lang.Object) */ + @Override public boolean add(T arg0) { return getDelegate().add(arg0); } @@ -89,6 +94,7 @@ public abstract class Iterator2Collection implements Collection { /* * @see java.util.Collection#contains(java.lang.Object) */ + @Override public boolean contains(Object arg0) { return getDelegate().contains(arg0); } @@ -96,6 +102,7 @@ public abstract class Iterator2Collection implements Collection { /* * @see java.util.Collection#remove(java.lang.Object) */ + @Override public boolean remove(Object arg0) { return getDelegate().remove(arg0); } @@ -103,6 +110,7 @@ public abstract class Iterator2Collection implements Collection { /* * @see java.util.Collection#addAll(java.util.Collection) */ + @Override public boolean addAll(Collection arg0) { return getDelegate().addAll(arg0); } @@ -110,6 +118,7 @@ public abstract class Iterator2Collection implements Collection { /* * @see java.util.Collection#containsAll(java.util.Collection) */ + @Override public boolean containsAll(Collection arg0) { return getDelegate().containsAll(arg0); } @@ -117,6 +126,7 @@ public abstract class Iterator2Collection implements Collection { /* * @see java.util.Collection#removeAll(java.util.Collection) */ + @Override public boolean removeAll(Collection arg0) { return getDelegate().removeAll(arg0); } @@ -124,6 +134,7 @@ public abstract class Iterator2Collection implements Collection { /* * @see java.util.Collection#retainAll(java.util.Collection) */ + @Override public boolean retainAll(Collection arg0) { return getDelegate().retainAll(arg0); } @@ -131,10 +142,12 @@ public abstract class Iterator2Collection implements Collection { /* * @see java.util.Collection#iterator() */ + @Override public Iterator iterator() { return getDelegate().iterator(); } + @Override @SuppressWarnings("hiding") public T[] toArray(T[] a) { return getDelegate().toArray(a); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/Iterator2Iterable.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/Iterator2Iterable.java index fc9cd17c0..ba5b756c3 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/Iterator2Iterable.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/Iterator2Iterable.java @@ -27,6 +27,7 @@ public class Iterator2Iterable implements Iterable { this.iter = iter; } + @Override public Iterator iterator() { return iter; } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/Iterator2List.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/Iterator2List.java index 48d21d068..aef864745 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/Iterator2List.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/Iterator2List.java @@ -26,42 +26,52 @@ public class Iterator2List extends Iterator2Collection implements List } } + @Override public void add(int index, T element) { delegate.add(index, element); } + @Override public boolean addAll(int index, Collection c) { return delegate.addAll(index, c); } + @Override public T get(int index) { return delegate.get(index); } + @Override public int indexOf(Object o) { return delegate.indexOf(o); } + @Override public int lastIndexOf(Object o) { return delegate.lastIndexOf(o); } + @Override public ListIterator listIterator() { return delegate.listIterator(); } + @Override public ListIterator listIterator(int index) { return delegate.listIterator(index); } + @Override public T remove(int index) { return delegate.remove(index); } + @Override public T set(int index, T element) { return delegate.set(index, element); } + @Override public List subList(int fromIndex, int toIndex) { return delegate.subList(fromIndex, toIndex); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorPlusOne.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorPlusOne.java index decb755a8..c9a5166e7 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorPlusOne.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorPlusOne.java @@ -33,10 +33,12 @@ public class IteratorPlusOne implements Iterator { this.xtra = xtra; } + @Override public boolean hasNext() { return it.hasNext() || (xtra != null); } + @Override public T next() { if (it.hasNext()) { return it.next(); @@ -47,6 +49,7 @@ public class IteratorPlusOne implements Iterator { } } + @Override public void remove() throws UnsupportedOperationException { throw new UnsupportedOperationException(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorPlusTwo.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorPlusTwo.java index 8831b76e3..5fe2b0364 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorPlusTwo.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorPlusTwo.java @@ -30,10 +30,12 @@ public class IteratorPlusTwo implements Iterator { this.xtra2 = xtra2; } + @Override public boolean hasNext() { return it.hasNext() || (xtra1 != null) || (xtra2 != null); } + @Override public T next() { if (it.hasNext()) { return it.next(); @@ -48,6 +50,7 @@ public class IteratorPlusTwo implements Iterator { } } + @Override public void remove() throws UnimplementedError { throw new UnimplementedError(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/MapIterator.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/MapIterator.java index 11f9686d1..9cff3e485 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/MapIterator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/MapIterator.java @@ -30,14 +30,17 @@ public class MapIterator implements Iterator { this.f = f; } + @Override public Y next() { return f.apply(i.next()); } + @Override public boolean hasNext() { return i.hasNext(); } + @Override public void remove() throws UnsupportedOperationException { throw new java.lang.UnsupportedOperationException(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/MultiMap.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/MultiMap.java index b72067f51..759fb55e0 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/MultiMap.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/MultiMap.java @@ -54,6 +54,7 @@ public interface MultiMap { public int size(); + @Override public String toString(); public boolean putAll(K key, Collection vals); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/NonNullSingletonIterator.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/NonNullSingletonIterator.java index b46ebbf7d..2e8c0305f 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/NonNullSingletonIterator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/NonNullSingletonIterator.java @@ -31,10 +31,12 @@ public class NonNullSingletonIterator implements Iterator { this.it = o; } + @Override public boolean hasNext() { return it != null; } + @Override public T next() { if (it == null) { throw new NoSuchElementException(); @@ -45,6 +47,7 @@ public class NonNullSingletonIterator implements Iterator { } } + @Override public void remove() throws UnsupportedOperationException { throw new UnsupportedOperationException(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/ObjectArrayMapping.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/ObjectArrayMapping.java index 1c78becab..8fd99a79b 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/ObjectArrayMapping.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/ObjectArrayMapping.java @@ -40,6 +40,7 @@ public class ObjectArrayMapping implements OrdinalSetMapping { } } + @Override public T getMappedObject(int n) throws NoSuchElementException { try { return array[n]; @@ -48,6 +49,7 @@ public class ObjectArrayMapping implements OrdinalSetMapping { } } + @Override public int getMappedIndex(Object o) { if (map.get(o) == null) { return -1; @@ -55,23 +57,28 @@ public class ObjectArrayMapping implements OrdinalSetMapping { return map.get(o).intValue(); } + @Override public boolean hasMappedIndex(Object o) { return map.get(o) != null; } + @Override public Iterator iterator() { return map.keySet().iterator(); } + @Override public int add(Object o) throws UnimplementedError { Assertions.UNREACHABLE(); return 0; } + @Override public int getMaximumIndex() { return array.length - 1; } + @Override public int getSize() { return map.size(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/OrFilter.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/OrFilter.java index 96751699d..963231bde 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/OrFilter.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/OrFilter.java @@ -30,6 +30,7 @@ public class OrFilter implements Filter { this.b = b; } + @Override public boolean accepts(T o) { return a.accepts(o) || b.accepts(o); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/Pair.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/Pair.java index 2f70da11b..bf2c8272d 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/Pair.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/Pair.java @@ -48,10 +48,12 @@ public class Pair { return new Iterator() { byte next = 1; + @Override public boolean hasNext() { return next > 0; } + @Override public Object next() { switch (next) { case 1 : @@ -65,6 +67,7 @@ public class Pair { } } + @Override public void remove() { Assertions.UNREACHABLE(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/ReverseIterator.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/ReverseIterator.java index 2647dd5a1..e89a2d788 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/ReverseIterator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/ReverseIterator.java @@ -38,10 +38,12 @@ public class ReverseIterator implements Iterator { nextIndex = list.size() - 1; } + @Override public boolean hasNext() { return nextIndex > -1; } + @Override public T next() throws NoSuchElementException { if (!hasNext()) { throw new NoSuchElementException(); @@ -49,6 +51,7 @@ public class ReverseIterator implements Iterator { return list.get(nextIndex--); } + @Override public void remove() throws UnsupportedOperationException { throw new UnsupportedOperationException(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/SimpleVector.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/SimpleVector.java index 783466c0b..9ceef764b 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/SimpleVector.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/SimpleVector.java @@ -32,6 +32,7 @@ public class SimpleVector implements IVector { /* * @see com.ibm.wala.util.intset.IntVector#get(int) */ + @Override @SuppressWarnings("unchecked") public T get(int x) { if (x < 0) { @@ -47,6 +48,7 @@ public class SimpleVector implements IVector { /* * @see com.ibm.wala.util.intset.IVector#set(int, int) */ + @Override public void set(int x, T value) { if (x < 0) { throw new IllegalArgumentException("illegal x value " + x); @@ -81,6 +83,7 @@ public class SimpleVector implements IVector { /* * @see com.ibm.wala.util.intset.IntVector#reportStats() */ + @Override public void performVerboseAction() { System.err.println(("size: " + store.length)); System.err.println(("occupancy: " + computeOccupancy())); @@ -100,6 +103,7 @@ public class SimpleVector implements IVector { } + @Override @SuppressWarnings("unchecked") public Iterator iterator() { ArrayList result = new ArrayList(); @@ -109,6 +113,7 @@ public class SimpleVector implements IVector { return result.iterator(); } + @Override public int getMaxIndex() { return maxIndex; } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/SmallMap.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/SmallMap.java index 51d5861c1..c14c9fd50 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/SmallMap.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/SmallMap.java @@ -35,6 +35,7 @@ public class SmallMap implements Map { /* */ + @Override public int size() { if (keysAndValues == null) { return 0; @@ -79,6 +80,7 @@ public class SmallMap implements Map { /* * @see java.util.Map#isEmpty() */ + @Override public boolean isEmpty() { return (keysAndValues == null); } @@ -86,6 +88,7 @@ public class SmallMap implements Map { /* * @see java.util.Map#containsKey(java.lang.Object) */ + @Override public boolean containsKey(Object key) { for (int i = 0; i < size(); i++) { if (keysAndValues[i].equals(key)) { @@ -98,6 +101,7 @@ public class SmallMap implements Map { /* * @see java.util.Map#containsValue(java.lang.Object) */ + @Override public boolean containsValue(Object value) { if (keysAndValues == null) { return false; @@ -120,6 +124,7 @@ public class SmallMap implements Map { /* * @see java.util.Map#get(java.lang.Object) */ + @Override @SuppressWarnings("unchecked") public V get(Object key) { @@ -149,6 +154,7 @@ public class SmallMap implements Map { /* * @see java.util.Map#put(java.lang.Object, java.lang.Object) */ + @Override @SuppressWarnings({ "unchecked", "unused" }) public V put(Object key, Object value) { if (key == null) { @@ -173,6 +179,7 @@ public class SmallMap implements Map { /* * @see java.util.Map#remove(java.lang.Object) */ + @Override public V remove(Object key) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } @@ -180,6 +187,7 @@ public class SmallMap implements Map { /* * @see java.util.Map#putAll(java.util.Map) */ + @Override public void putAll(Map t) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } @@ -187,6 +195,7 @@ public class SmallMap implements Map { /* * @see java.util.Map#clear() */ + @Override public void clear() { keysAndValues = null; } @@ -194,6 +203,7 @@ public class SmallMap implements Map { /* * @see java.util.Map#keySet() */ + @Override @SuppressWarnings("unchecked") public Set keySet() { // TODO: use a better set implementation, SOON!! @@ -207,6 +217,7 @@ public class SmallMap implements Map { /* * @see java.util.Map#values() */ + @Override @SuppressWarnings("unchecked") public Collection values() { int s = size(); @@ -223,6 +234,7 @@ public class SmallMap implements Map { /** * @throws UnimplementedError */ + @Override public Set> entrySet() throws UnimplementedError { Assertions.UNREACHABLE("must implement entrySet"); return null; diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/SparseVector.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/SparseVector.java index a530f07b7..82e75aba2 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/SparseVector.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/SparseVector.java @@ -53,6 +53,7 @@ public class SparseVector implements IVector { /* * @see com.ibm.wala.util.intset.IntVector#get(int) */ + @Override @SuppressWarnings("unchecked") public T get(int x) { int index = indices.getIndex(x); @@ -68,6 +69,7 @@ public class SparseVector implements IVector { * * @see com.ibm.wala.util.intset.IntVector#set(int, int) */ + @Override public void set(int x, T value) { int index = indices.getIndex(x); if (index == -1) { @@ -92,6 +94,7 @@ public class SparseVector implements IVector { /* * @see com.ibm.wala.util.debug.VerboseAction#performVerboseAction() */ + @Override public void performVerboseAction() { System.err.println((getClass() + " stats: ")); System.err.println(("data.length " + data.length)); @@ -102,15 +105,18 @@ public class SparseVector implements IVector { /* * @see com.ibm.wala.util.intset.IVector#iterator() */ + @Override public Iterator iterator() { return new Iterator() { int i = 0; + @Override public boolean hasNext() { return i < indices.size(); } + @Override @SuppressWarnings("unchecked") public T next() { if (!hasNext()) { @@ -119,6 +125,7 @@ public class SparseVector implements IVector { return (T) data[i++]; } + @Override public void remove() { // TODO Auto-generated method stub Assertions.UNREACHABLE(); @@ -130,6 +137,7 @@ public class SparseVector implements IVector { /** * @return max i s.t get(i) != null */ + @Override public int getMaxIndex() throws IllegalStateException { return indices.max(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/ToStringComparator.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/ToStringComparator.java index 42c2397c0..161fc3d19 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/ToStringComparator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/ToStringComparator.java @@ -25,6 +25,7 @@ public class ToStringComparator implements Comparator { /* * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ + @Override public int compare(T o1, T o2) throws NullPointerException { // by convention, null is the least element if (o1 == null) { diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/TwoLevelVector.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/TwoLevelVector.java index d28e8f29a..26c59d53c 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/TwoLevelVector.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/TwoLevelVector.java @@ -36,6 +36,7 @@ public class TwoLevelVector implements IVector { /* * @see com.ibm.wala.util.intset.IntVector#get(int) */ + @Override public T get(int x) { if (x < 0) { throw new IllegalArgumentException("invalid x: " + x); @@ -65,6 +66,7 @@ public class TwoLevelVector implements IVector { * * @see com.ibm.wala.util.intset.IntVector#set(int, int) */ + @Override public void set(int x, T value) { if (x < 0) { throw new IllegalArgumentException("illegal x: " + x); @@ -100,6 +102,7 @@ public class TwoLevelVector implements IVector { /* * @see com.ibm.wala.util.debug.VerboseAction#performVerboseAction() */ + @Override public void performVerboseAction() { // do nothing; } @@ -107,6 +110,7 @@ public class TwoLevelVector implements IVector { /* * @see com.ibm.wala.util.intset.IVector#iterator() */ + @Override public Iterator iterator() { return new Iterator() { final Iterator> outer = data.iterator(); @@ -125,10 +129,12 @@ public class TwoLevelVector implements IVector { } } + @Override public boolean hasNext() { return inner != null; } + @Override public T next() { T result = inner.next(); if (!inner.hasNext()) { @@ -147,6 +153,7 @@ public class TwoLevelVector implements IVector { return result; } + @Override public void remove() { // TODO Auto-generated method stub Assertions.UNREACHABLE(); @@ -154,6 +161,7 @@ public class TwoLevelVector implements IVector { }; } + @Override public int getMaxIndex() { if (maxPage == -1) { return -1; diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/AbstractGraph.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/AbstractGraph.java index da0aeeea0..94b8d9253 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/AbstractGraph.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/AbstractGraph.java @@ -30,6 +30,7 @@ public abstract class AbstractGraph implements Graph { /* * @see com.ibm.wala.util.graph.Graph#iterateNodes() */ + @Override public Iterator iterator() { return getNodeManager().iterator(); } @@ -37,6 +38,7 @@ public abstract class AbstractGraph implements Graph { /* * @see com.ibm.wala.util.graph.Graph#getNumberOfNodes() */ + @Override public int getNumberOfNodes() { return getNodeManager().getNumberOfNodes(); } @@ -44,6 +46,7 @@ public abstract class AbstractGraph implements Graph { /* * @see com.ibm.wala.util.graph.EdgeManager#getPredNodeCount(java.lang.Object) */ + @Override public int getPredNodeCount(T n) throws IllegalArgumentException { if (n == null) { throw new IllegalArgumentException("n cannot be null"); @@ -54,6 +57,7 @@ public abstract class AbstractGraph implements Graph { /* * @see com.ibm.wala.util.graph.EdgeManager#getPredNodes(java.lang.Object) */ + @Override public Iterator getPredNodes(T n) throws IllegalArgumentException { if (n == null) { throw new IllegalArgumentException("n cannot be null"); @@ -64,6 +68,7 @@ public abstract class AbstractGraph implements Graph { /* * @see com.ibm.wala.util.graph.EdgeManager#getSuccNodeCount(java.lang.Object) */ + @Override public int getSuccNodeCount(T n) throws IllegalArgumentException { if (!containsNode(n) || n == null) { throw new IllegalArgumentException("node not in graph " + n); @@ -74,6 +79,7 @@ public abstract class AbstractGraph implements Graph { /* * @see com.ibm.wala.util.graph.EdgeManager#getSuccNodes(java.lang.Object) */ + @Override public Iterator getSuccNodes(T n) throws IllegalArgumentException { if (n == null) { throw new IllegalArgumentException("n cannot be null"); @@ -84,6 +90,7 @@ public abstract class AbstractGraph implements Graph { /* * @see com.ibm.wala.util.graph.NodeManager#addNode(com.ibm.wala.util.graph.Node) */ + @Override public void addNode(T n) { getNodeManager().addNode(n); } @@ -92,6 +99,7 @@ public abstract class AbstractGraph implements Graph { * @see com.ibm.wala.util.graph.EdgeManager#addEdge(com.ibm.wala.util.graph.Node, * com.ibm.wala.util.graph.Node) */ + @Override public void addEdge(T src, T dst) throws IllegalArgumentException { getEdgeManager().addEdge(src, dst); } @@ -99,6 +107,7 @@ public abstract class AbstractGraph implements Graph { /* * @see com.ibm.wala.util.graph.EdgeManager#removeEdge(java.lang.Object, java.lang.Object) */ + @Override public void removeEdge(T src, T dst) throws IllegalArgumentException { getEdgeManager().removeEdge(src, dst); } @@ -106,6 +115,7 @@ public abstract class AbstractGraph implements Graph { /* * @see com.ibm.wala.util.graph.EdgeManager#hasEdge(java.lang.Object, java.lang.Object) */ + @Override public boolean hasEdge(T src, T dst) { if (src == null) { throw new IllegalArgumentException("src is null"); @@ -119,6 +129,7 @@ public abstract class AbstractGraph implements Graph { /* * @see com.ibm.wala.util.graph.EdgeManager#removeEdges(com.ibm.wala.util.graph.Node) */ + @Override public void removeAllIncidentEdges(T node) throws IllegalArgumentException { if (node == null) { throw new IllegalArgumentException("node cannot be null"); @@ -129,6 +140,7 @@ public abstract class AbstractGraph implements Graph { /* * @see com.ibm.wala.util.graph.EdgeManager#removeEdges(com.ibm.wala.util.graph.Node) */ + @Override public void removeIncomingEdges(T node) throws IllegalArgumentException { if (node == null) { throw new IllegalArgumentException("node cannot be null"); @@ -139,6 +151,7 @@ public abstract class AbstractGraph implements Graph { /* * @see com.ibm.wala.util.graph.EdgeManager#removeEdges(com.ibm.wala.util.graph.Node) */ + @Override public void removeOutgoingEdges(T node) throws IllegalArgumentException { if (node == null) { throw new IllegalArgumentException("node cannot be null"); @@ -149,6 +162,7 @@ public abstract class AbstractGraph implements Graph { /* * @see com.ibm.wala.util.graph.Graph#removeNode(com.ibm.wala.util.graph.Node) */ + @Override public void removeNodeAndEdges(T N) throws IllegalArgumentException { if (N == null) { throw new IllegalArgumentException("N cannot be null"); @@ -160,6 +174,7 @@ public abstract class AbstractGraph implements Graph { /* * @see com.ibm.wala.util.graph.NodeManager#remove(com.ibm.wala.util.graph.Node) */ + @Override public void removeNode(T n) throws IllegalArgumentException { if (n == null) { throw new IllegalArgumentException("N cannot be null"); @@ -187,6 +202,7 @@ public abstract class AbstractGraph implements Graph { /* * @see com.ibm.wala.util.graph.NodeManager#containsNode(com.ibm.wala.util.graph.Node) */ + @Override public boolean containsNode(T n) { if (n == null) { throw new IllegalArgumentException("n cannot be null"); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/AbstractNumberedGraph.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/AbstractNumberedGraph.java index ed630b9cc..431a1756d 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/AbstractNumberedGraph.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/AbstractNumberedGraph.java @@ -23,16 +23,19 @@ public abstract class AbstractNumberedGraph extends AbstractGraph implemen /** * @return the object which manages nodes in the graph */ + @Override protected abstract NumberedNodeManager getNodeManager(); /** * @return the object which manages edges in the graph */ + @Override protected abstract NumberedEdgeManager getEdgeManager(); /* * @see com.ibm.wala.util.graph.NumberedNodeManager#getMaxNumber() */ + @Override public int getMaxNumber() { return getNodeManager().getMaxNumber(); } @@ -40,6 +43,7 @@ public abstract class AbstractNumberedGraph extends AbstractGraph implemen /* * @see com.ibm.wala.util.graph.NumberedNodeManager#getNode(int) */ + @Override public T getNode(int number) { return getNodeManager().getNode(number); } @@ -47,6 +51,7 @@ public abstract class AbstractNumberedGraph extends AbstractGraph implemen /* * @see com.ibm.wala.util.graph.NumberedNodeManager#getNumber(com.ibm.wala.util.graph.Node) */ + @Override public int getNumber(T N) { if (N == null) { throw new IllegalArgumentException("N cannot be null"); @@ -57,6 +62,7 @@ public abstract class AbstractNumberedGraph extends AbstractGraph implemen /* * @see com.ibm.wala.util.graph.NumberedNodeManager#iterateNodes(com.ibm.wala.util.intset.IntSet) */ + @Override public Iterator iterateNodes(final IntSet s) { return new NumberedNodeIterator(s, this); } @@ -64,6 +70,7 @@ public abstract class AbstractNumberedGraph extends AbstractGraph implemen /* * @see com.ibm.wala.util.graph.NumberedEdgeManager#getPredNodeNumbers(java.lang.Object) */ + @Override public IntSet getPredNodeNumbers(T node) throws IllegalArgumentException { assert getEdgeManager() != null; return getEdgeManager().getPredNodeNumbers(node); @@ -72,6 +79,7 @@ public abstract class AbstractNumberedGraph extends AbstractGraph implemen /* * @see com.ibm.wala.util.graph.NumberedEdgeManager#getSuccNodeNumbers(java.lang.Object) */ + @Override public IntSet getSuccNodeNumbers(T node) throws IllegalArgumentException { return getEdgeManager().getSuccNodeNumbers(node); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/EdgeFilteredNumberedGraph.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/EdgeFilteredNumberedGraph.java index bc91b0ae8..4fa778937 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/EdgeFilteredNumberedGraph.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/EdgeFilteredNumberedGraph.java @@ -49,51 +49,62 @@ public class EdgeFilteredNumberedGraph extends AbstractNumberedGraph { private final class Edges implements NumberedEdgeManager { + @Override public void addEdge(T src, T dst) { Assertions.UNREACHABLE(); } + @Override public int getPredNodeCount(T N) { Assertions.UNREACHABLE(); return 0; } + @Override public Iterator getPredNodes(T N) { Assertions.UNREACHABLE(); return null; } + @Override public int getSuccNodeCount(T N) { Assertions.UNREACHABLE(); return 0; } + @Override public Iterator getSuccNodes(T N) { Assertions.UNREACHABLE(); return null; } + @Override public boolean hasEdge(T src, T dst) { Assertions.UNREACHABLE(); return false; } + @Override public void removeAllIncidentEdges(T node) throws UnsupportedOperationException { Assertions.UNREACHABLE(); } + @Override public void removeEdge(T src, T dst) throws UnsupportedOperationException { Assertions.UNREACHABLE(); } + @Override public void removeIncomingEdges(T node) throws UnsupportedOperationException { Assertions.UNREACHABLE(); } + @Override public void removeOutgoingEdges(T node) throws UnsupportedOperationException { Assertions.UNREACHABLE(); } + @Override public IntSet getPredNodeNumbers(T node) { IntSet s = delegate.getPredNodeNumbers(node); MutableIntSet result = MutableSparseIntSet.makeEmpty(); @@ -106,6 +117,7 @@ public class EdgeFilteredNumberedGraph extends AbstractNumberedGraph { return result; } + @Override public IntSet getSuccNodeNumbers(T node) { Assertions.UNREACHABLE(); return null; diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphReachability.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphReachability.java index 7ff21d2ba..0885de27e 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphReachability.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphReachability.java @@ -94,6 +94,7 @@ public class GraphReachability { /* * @see com.ibm.wala.dataflow.graph.ITransferFunctionProvider#getNodeTransferFunction(java.lang.Object) */ + @Override public UnaryOperator getNodeTransferFunction(T n) { int index = domain.getMappedIndex(n); if (index > -1) { @@ -106,6 +107,7 @@ public class GraphReachability { /* * @see com.ibm.wala.dataflow.graph.ITransferFunctionProvider#hasNodeTransferFunctions() */ + @Override public boolean hasNodeTransferFunctions() { return true; } @@ -113,6 +115,7 @@ public class GraphReachability { /* * @see com.ibm.wala.dataflow.graph.ITransferFunctionProvider#getEdgeTransferFunction(java.lang.Object, java.lang.Object) */ + @Override public UnaryOperator getEdgeTransferFunction(Object from, Object to) { Assertions.UNREACHABLE(); return null; @@ -121,6 +124,7 @@ public class GraphReachability { /* * @see com.ibm.wala.dataflow.graph.ITransferFunctionProvider#hasEdgeTransferFunctions() */ + @Override public boolean hasEdgeTransferFunctions() { return false; } @@ -128,6 +132,7 @@ public class GraphReachability { /* * @see com.ibm.wala.dataflow.graph.ITransferFunctionProvider#getMeetOperator() */ + @Override public AbstractMeetOperator getMeetOperator() { return BitVectorUnion.instance(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphSlicer.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphSlicer.java index 755adaa45..0028ff087 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphSlicer.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphSlicer.java @@ -82,10 +82,12 @@ public class GraphSlicer { final NodeManager n = new NodeManager() { int nodeCount = -1; + @Override public Iterator iterator() { return Predicate.filter(g.iterator(), p).iterator(); } + @Override public int getNumberOfNodes() { if (nodeCount == -1) { nodeCount = IteratorUtil.count(iterator()); @@ -93,14 +95,17 @@ public class GraphSlicer { return nodeCount; } + @Override public void addNode(T n) { Assertions.UNREACHABLE(); } + @Override public void removeNode(T n) { Assertions.UNREACHABLE(); } + @Override public boolean containsNode(T n) { return p.test(n) && g.containsNode(n); } @@ -108,42 +113,52 @@ public class GraphSlicer { }; final EdgeManager e = new EdgeManager() { + @Override public Iterator getPredNodes(T n) { return Predicate.filter(g.getPredNodes(n), p).iterator(); } + @Override public int getPredNodeCount(T n) { return IteratorUtil.count(getPredNodes(n)); } + @Override public Iterator getSuccNodes(T n) { return Predicate.filter(g.getSuccNodes(n), p).iterator(); } + @Override public int getSuccNodeCount(T N) { return IteratorUtil.count(getSuccNodes(N)); } + @Override public void addEdge(T src, T dst) { Assertions.UNREACHABLE(); } + @Override public void removeEdge(T src, T dst) { Assertions.UNREACHABLE(); } + @Override public void removeAllIncidentEdges(T node) { Assertions.UNREACHABLE(); } + @Override public void removeIncomingEdges(T node) { Assertions.UNREACHABLE(); } + @Override public void removeOutgoingEdges(T node) { Assertions.UNREACHABLE(); } + @Override public boolean hasEdge(T src, T dst) { return g.hasEdge(src, dst) && p.test(src) && p.test(dst); } @@ -170,14 +185,17 @@ public class GraphSlicer { final NodeManager nodeManager = new NodeManager() { private int count = -1; + @Override public void addNode(E n) { throw new UnsupportedOperationException(); } + @Override public boolean containsNode(E N) { return G.containsNode(N) && fmember.accepts(N); } + @Override public int getNumberOfNodes() { if (count == -1) { count = IteratorUtil.count(iterator()); @@ -185,10 +203,12 @@ public class GraphSlicer { return count; } + @Override public Iterator iterator() { return new FilterIterator(G.iterator(), fmember); } + @Override public void removeNode(E n) { throw new UnsupportedOperationException(); } @@ -229,6 +249,7 @@ public class GraphSlicer { private void setPredNodes(E N) { preds.put(N, getConnected(N, new Function>() { + @Override public Iterator apply(E object) { return G.getPredNodes(object); } @@ -237,12 +258,14 @@ public class GraphSlicer { private void setSuccNodes(E N) { succs.put(N, getConnected(N, new Function>() { + @Override public Iterator apply(E object) { return G.getSuccNodes(object); } })); } + @Override public int getPredNodeCount(E N) { if (!preds.containsKey(N)) { setPredNodes(N); @@ -250,6 +273,7 @@ public class GraphSlicer { return preds.get(N).size(); } + @Override public Iterator getPredNodes(E N) { if (!preds.containsKey(N)) { setPredNodes(N); @@ -257,6 +281,7 @@ public class GraphSlicer { return preds.get(N).iterator(); } + @Override public int getSuccNodeCount(E N) { if (!succs.containsKey(N)) { setSuccNodes(N); @@ -264,6 +289,7 @@ public class GraphSlicer { return succs.get(N).size(); } + @Override public Iterator getSuccNodes(E N) { if (!succs.containsKey(N)) { setSuccNodes(N); @@ -271,6 +297,7 @@ public class GraphSlicer { return succs.get(N).iterator(); } + @Override public boolean hasEdge(E src, E dst) { if (!preds.containsKey(dst)) { setPredNodes(dst); @@ -278,22 +305,27 @@ public class GraphSlicer { return preds.get(dst).contains(src); } + @Override public void addEdge(E src, E dst) { throw new UnsupportedOperationException(); } + @Override public void removeAllIncidentEdges(E node) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } + @Override public void removeEdge(E src, E dst) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } + @Override public void removeIncomingEdges(E node) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } + @Override public void removeOutgoingEdges(E node) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/NodeManager.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/NodeManager.java index 7464546c6..26d255933 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/NodeManager.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/NodeManager.java @@ -26,6 +26,7 @@ public interface NodeManager extends Iterable { /** * @return an {@link Iterator} of the nodes in this graph */ + @Override public Iterator iterator(); /** diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/Dominators.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/Dominators.java index 3e3b5ddfd..3ccc5f868 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/Dominators.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/Dominators.java @@ -116,14 +116,17 @@ public abstract class Dominators { return new Iterator() { private T current = node; + @Override public void remove() { throw new UnsupportedOperationException(); } + @Override public boolean hasNext() { return current != null; } + @Override public T next() { if (current == null) throw new NoSuchElementException(); @@ -165,6 +168,7 @@ public abstract class Dominators { } } + @Override public Iterator getPredNodes(T N) { if (N == root) return EmptyIterator.instance(); @@ -172,10 +176,12 @@ public abstract class Dominators { return new NonNullSingletonIterator(getIdom(N)); } + @Override public int getPredNodeCount(Object N) { return (N == root) ? 0 : 1; } + @Override public Iterator getSuccNodes(Object N) { if (nextMap.containsKey(N)) return nextMap.get(N).iterator(); @@ -183,6 +189,7 @@ public abstract class Dominators { return EmptyIterator.instance(); } + @Override public int getSuccNodeCount(Object N) { if (nextMap.containsKey(N)) return nextMap.get(N).size(); @@ -190,30 +197,36 @@ public abstract class Dominators { return 0; } + @Override public void addEdge(Object src, Object dst) { Assertions.UNREACHABLE(); } + @Override public void removeEdge(Object src, Object dst) { Assertions.UNREACHABLE(); } + @Override public void removeAllIncidentEdges(Object node) { Assertions.UNREACHABLE(); } + @Override public void removeIncomingEdges(Object node) { // TODO Auto-generated method stub Assertions.UNREACHABLE(); } + @Override public void removeOutgoingEdges(Object node) { // TODO Auto-generated method stub Assertions.UNREACHABLE(); } + @Override public boolean hasEdge(Object src, Object dst) { // TODO Auto-generated method stub Assertions.UNREACHABLE(); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/BasicNodeManager.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/BasicNodeManager.java index a67954686..aee118f10 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/BasicNodeManager.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/BasicNodeManager.java @@ -24,6 +24,7 @@ public class BasicNodeManager implements NodeManager { final private HashSet nodes = HashSetFactory.make(); + @Override public Iterator iterator() { return nodes.iterator(); } @@ -31,6 +32,7 @@ public class BasicNodeManager implements NodeManager { /* * @see com.ibm.wala.util.graph.NodeManager#getNumberOfNodes() */ + @Override public int getNumberOfNodes() { return nodes.size(); } @@ -38,6 +40,7 @@ public class BasicNodeManager implements NodeManager { /* * @see com.ibm.wala.util.graph.NodeManager#addNode(com.ibm.wala.util.graph.Node) */ + @Override public void addNode(T n) { nodes.add(n); } @@ -45,6 +48,7 @@ public class BasicNodeManager implements NodeManager { /* * @see com.ibm.wala.util.graph.NodeManager#remove(com.ibm.wala.util.graph.Node) */ + @Override public void removeNode(T n) { nodes.remove(n); } @@ -52,6 +56,7 @@ public class BasicNodeManager implements NodeManager { /* * @see com.ibm.wala.util.graph.NodeManager#containsNode(com.ibm.wala.util.graph.Node) */ + @Override public boolean containsNode(T N) { return nodes.contains(N); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/BasicOrderedMultiGraph.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/BasicOrderedMultiGraph.java index 27a483d8c..4b95f7266 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/BasicOrderedMultiGraph.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/BasicOrderedMultiGraph.java @@ -40,6 +40,7 @@ public class BasicOrderedMultiGraph implements OrderedMultiGraph { /** * Add this edge, unconditionally setting it as the next successor. */ + @Override public void addEdge(T src, T dst) throws IllegalArgumentException { delegate.addEdge(src, dst); SimpleVector s = successorEdges.get(src); @@ -50,6 +51,7 @@ public class BasicOrderedMultiGraph implements OrderedMultiGraph { s.set(s.getMaxIndex() + 1, dst); } + @Override public void addEdge(int i, T src, T dst) throws IllegalArgumentException { delegate.addEdge(src, dst); SimpleVector s = successorEdges.get(src); @@ -60,18 +62,22 @@ public class BasicOrderedMultiGraph implements OrderedMultiGraph { s.set(i, dst); } + @Override public void addNode(T n) { delegate.addNode(n); } + @Override public boolean containsNode(T N) { return delegate.containsNode(N); } + @Override public int getNumberOfNodes() { return delegate.getNumberOfNodes(); } + @Override public int getPredNodeCount(T N) throws IllegalArgumentException { return delegate.getPredNodeCount(N); } @@ -79,56 +85,68 @@ public class BasicOrderedMultiGraph implements OrderedMultiGraph { /** * For now, this returns nodes in no particular order! Fix this when needed. */ + @Override public Iterator getPredNodes(T N) throws IllegalArgumentException { return delegate.getPredNodes(N); } + @Override public int getSuccNodeCount(T N) throws IllegalArgumentException { return delegate.getSuccNodeCount(N); } + @Override public Iterator getSuccNodes(T N) throws IllegalArgumentException { return delegate.getSuccNodes(N); } + @Override public boolean hasEdge(T src, T dst) { return delegate.hasEdge(src, dst); } + @Override public Iterator iterator() { return delegate.iterator(); } + @Override public void removeAllIncidentEdges(T node) throws UnimplementedError { Assertions.UNREACHABLE(); delegate.removeAllIncidentEdges(node); } + @Override public void removeEdge(T src, T dst) throws UnimplementedError { Assertions.UNREACHABLE(); delegate.removeEdge(src, dst); } + @Override public void removeIncomingEdges(T node) throws UnimplementedError { Assertions.UNREACHABLE(); delegate.removeIncomingEdges(node); } + @Override public void removeNode(T n) throws UnimplementedError { Assertions.UNREACHABLE(); delegate.removeNode(n); } + @Override public void removeNodeAndEdges(T N) throws UnimplementedError { Assertions.UNREACHABLE(); delegate.removeNodeAndEdges(N); } + @Override public void removeOutgoingEdges(T node) throws UnimplementedError { Assertions.UNREACHABLE(); delegate.removeOutgoingEdges(node); } + @Override public T getSuccessor(T node, int i) throws IllegalArgumentException { SimpleVector s = successorEdges.get(node); if (s == null) { diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/DelegatingGraph.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/DelegatingGraph.java index 024e55583..56c8dca27 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/DelegatingGraph.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/DelegatingGraph.java @@ -28,18 +28,22 @@ public class DelegatingGraph implements Graph { this.delegate = delegate; } + @Override public void addEdge(T src, T dst) throws IllegalArgumentException { delegate.addEdge(src, dst); } + @Override public void addNode(T n) { delegate.addNode(n); } + @Override public boolean containsNode(T N) { return delegate.containsNode(N); } + @Override public int getNumberOfNodes() { return delegate.getNumberOfNodes(); } @@ -49,50 +53,62 @@ public class DelegatingGraph implements Graph { return delegate.toString(); } + @Override public int getPredNodeCount(T N) throws IllegalArgumentException { return delegate.getPredNodeCount(N); } + @Override public Iterator getPredNodes(T N) throws IllegalArgumentException { return delegate.getPredNodes(N); } + @Override public int getSuccNodeCount(T N) throws IllegalArgumentException { return delegate.getSuccNodeCount(N); } + @Override public Iterator getSuccNodes(T N) throws IllegalArgumentException { return delegate.getSuccNodes(N); } + @Override public boolean hasEdge(T src, T dst) { return delegate.hasEdge(src, dst); } + @Override public Iterator iterator() { return delegate.iterator(); } + @Override public void removeAllIncidentEdges(T node) throws IllegalArgumentException { delegate.removeAllIncidentEdges(node); } + @Override public void removeEdge(T src, T dst) throws IllegalArgumentException { delegate.removeEdge(src, dst); } + @Override public void removeIncomingEdges(T node) throws IllegalArgumentException { delegate.removeIncomingEdges(node); } + @Override public void removeNode(T n) { delegate.removeNode(n); } + @Override public void removeNodeAndEdges(T N) throws IllegalArgumentException { delegate.removeNodeAndEdges(N); } + @Override public void removeOutgoingEdges(T node) throws IllegalArgumentException { delegate.removeOutgoingEdges(node); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/DelegatingNumberedEdgeManager.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/DelegatingNumberedEdgeManager.java index ff2baaafd..38ff3e9f1 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/DelegatingNumberedEdgeManager.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/DelegatingNumberedEdgeManager.java @@ -44,14 +44,17 @@ public class DelegatingNumberedEdgeManager imp this.delegate = delegate; } + @Override public boolean hasNext() { return delegate.hasNext(); } + @Override public T next() { return nodeManager.getNode(delegate.next()); } + @Override public void remove() { // TODO Auto-generated method stub Assertions.UNREACHABLE(); @@ -61,6 +64,7 @@ public class DelegatingNumberedEdgeManager imp /* * @see com.ibm.wala.util.graph.EdgeManager#getPredNodes(com.ibm.wala.util.graph.Node) */ + @Override public Iterator getPredNodes(T N) throws IllegalArgumentException { if (N == null) { throw new IllegalArgumentException("N cannot be null"); @@ -71,6 +75,7 @@ public class DelegatingNumberedEdgeManager imp return (pred == null) ? empty : (Iterator) new IntSetNodeIterator(pred.intIterator()); } + @Override public IntSet getPredNodeNumbers(T node) { if (node == null) { throw new IllegalArgumentException("N cannot be null"); @@ -83,6 +88,7 @@ public class DelegatingNumberedEdgeManager imp /* * @see com.ibm.wala.util.graph.EdgeManager#getPredNodeCount(com.ibm.wala.util.graph.Node) */ + @Override public int getPredNodeCount(T N) throws IllegalArgumentException { if (N == null) { throw new IllegalArgumentException("N cannot be null"); @@ -99,6 +105,7 @@ public class DelegatingNumberedEdgeManager imp /* * @see com.ibm.wala.util.graph.EdgeManager#getSuccNodes(com.ibm.wala.util.graph.Node) */ + @Override public Iterator getSuccNodes(T N) { if (N == null) { throw new IllegalArgumentException("N cannot be null"); @@ -112,6 +119,7 @@ public class DelegatingNumberedEdgeManager imp /* * @see com.ibm.wala.util.graph.EdgeManager#getSuccNodeCount(com.ibm.wala.util.graph.Node) */ + @Override public int getSuccNodeCount(T N) { if (N == null) { throw new IllegalArgumentException("N is null"); @@ -124,6 +132,7 @@ public class DelegatingNumberedEdgeManager imp /* * @see com.ibm.wala.util.graph.EdgeManager#addEdge(com.ibm.wala.util.graph.Node, com.ibm.wala.util.graph.Node) */ + @Override public void addEdge(T src, T dst) { if (dst == null || src == null) { throw new IllegalArgumentException("parameter is null"); @@ -132,6 +141,7 @@ public class DelegatingNumberedEdgeManager imp dst.addPred(src.getGraphNodeId()); } + @Override public void removeEdge(T src, T dst) throws UnimplementedError { Assertions.UNREACHABLE("Implement me"); } @@ -139,6 +149,7 @@ public class DelegatingNumberedEdgeManager imp /* * @see com.ibm.wala.util.graph.EdgeManager#removeEdges(com.ibm.wala.util.graph.Node) */ + @Override public void removeAllIncidentEdges(T node) throws UnimplementedError { if (node == null) { throw new IllegalArgumentException("node is null"); @@ -150,6 +161,7 @@ public class DelegatingNumberedEdgeManager imp /* * @see com.ibm.wala.util.graph.EdgeManager#removeEdges(com.ibm.wala.util.graph.Node) */ + @Override public void removeIncomingEdges(T node) throws UnimplementedError { if (node == null) { throw new IllegalArgumentException("node cannot be null"); @@ -161,6 +173,7 @@ public class DelegatingNumberedEdgeManager imp /* * @see com.ibm.wala.util.graph.EdgeManager#removeEdges(com.ibm.wala.util.graph.Node) */ + @Override public void removeOutgoingEdges(T node) throws UnimplementedError { if (node == null) { throw new IllegalArgumentException("node cannot be null"); @@ -169,6 +182,7 @@ public class DelegatingNumberedEdgeManager imp n.removeOutgoingEdges(); } + @Override public boolean hasEdge(T src, T dst) throws IllegalArgumentException { if (dst == null) { throw new IllegalArgumentException("dst == null"); @@ -176,6 +190,7 @@ public class DelegatingNumberedEdgeManager imp return getSuccNodeNumbers(src).contains(dst.getGraphNodeId()); } + @Override public IntSet getSuccNodeNumbers(T node) { if (node == null) { throw new IllegalArgumentException("node cannot be null"); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/DelegatingNumberedNodeManager.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/DelegatingNumberedNodeManager.java index 09542fe8c..9f23fec37 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/DelegatingNumberedNodeManager.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/DelegatingNumberedNodeManager.java @@ -35,6 +35,7 @@ public class DelegatingNumberedNodeManager implements /* * @see com.ibm.wala.util.graph.NumberedGraph#getNumber(com.ibm.wala.util.graph.Node) */ + @Override public int getNumber(T N) { if (N == null) { throw new IllegalArgumentException("N is null"); @@ -43,6 +44,7 @@ public class DelegatingNumberedNodeManager implements return n.getGraphNodeId(); } + @Override @SuppressWarnings("unchecked") public T getNode(int number) { try { @@ -55,6 +57,7 @@ public class DelegatingNumberedNodeManager implements /* * @see com.ibm.wala.util.graph.NumberedGraph#getMaxNumber() */ + @Override public int getMaxNumber() { return maxNumber; } @@ -62,6 +65,7 @@ public class DelegatingNumberedNodeManager implements /* * @see com.ibm.wala.util.graph.Graph#iterateNodes() */ + @Override public Iterator iterator() { final INodeWithNumber[] arr = nodes; return new Iterator() { @@ -80,10 +84,12 @@ public class DelegatingNumberedNodeManager implements next = -1; } + @Override public boolean hasNext() { return next != -1; } + @Override @SuppressWarnings("unchecked") public T next() { if (hasNext()) { @@ -95,6 +101,7 @@ public class DelegatingNumberedNodeManager implements } } + @Override public void remove() { Assertions.UNREACHABLE(); } @@ -104,6 +111,7 @@ public class DelegatingNumberedNodeManager implements /* * @see com.ibm.wala.util.graph.Graph#getNumberOfNodes() */ + @Override public int getNumberOfNodes() { return numberOfNodes; } @@ -114,6 +122,7 @@ public class DelegatingNumberedNodeManager implements * @see com.ibm.wala.util.graph.NodeManager#addNode(java.lang.Object) * @throws IllegalArgumentException if n is null */ + @Override public void addNode(T n) { if (n == null) { throw new IllegalArgumentException("n is null"); @@ -152,6 +161,7 @@ public class DelegatingNumberedNodeManager implements /* * @see com.ibm.wala.util.graph.NodeManager#remove(com.ibm.wala.util.graph.Node) */ + @Override public void removeNode(T n) { if (n == null) { throw new IllegalArgumentException("n is null"); @@ -183,6 +193,7 @@ public class DelegatingNumberedNodeManager implements /* * @see com.ibm.wala.util.graph.NodeManager#containsNode(com.ibm.wala.util.graph.Node) */ + @Override public boolean containsNode(T n) { if (n == null) { throw new IllegalArgumentException("n is null"); @@ -208,6 +219,7 @@ public class DelegatingNumberedNodeManager implements /* * @see com.ibm.wala.util.graph.NumberedNodeManager#iterateNodes(com.ibm.wala.util.intset.IntSet) */ + @Override public Iterator iterateNodes(IntSet s) { return new NumberedNodeIterator(s, this); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/InvertingEdgeManager.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/InvertingEdgeManager.java index 7b4f2ea0a..96c5e1de8 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/InvertingEdgeManager.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/InvertingEdgeManager.java @@ -28,43 +28,53 @@ public class InvertingEdgeManager implements EdgeManager { this.original = original; } + @Override public Iterator getPredNodes(T N) throws IllegalArgumentException { return original.getSuccNodes(N); } + @Override public int getPredNodeCount(T N) throws IllegalArgumentException{ return original.getSuccNodeCount(N); } + @Override public Iterator getSuccNodes(T N) throws IllegalArgumentException{ return original.getPredNodes(N); } + @Override public int getSuccNodeCount(T N) throws IllegalArgumentException{ return original.getPredNodeCount(N); } + @Override public void addEdge(T src, T dst)throws IllegalArgumentException { original.addEdge(dst, src); } + @Override public void removeEdge(T src, T dst) throws IllegalArgumentException{ original.removeEdge(dst, src); } + @Override public boolean hasEdge(T src, T dst) { return original.hasEdge(dst, src); } + @Override public void removeAllIncidentEdges(T node) throws IllegalArgumentException { original.removeAllIncidentEdges(node); } + @Override public void removeIncomingEdges(T node) throws IllegalArgumentException{ original.removeOutgoingEdges(node); } + @Override public void removeOutgoingEdges(T node)throws IllegalArgumentException { original.removeIncomingEdges(node); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/InvertingNumberedEdgeManager.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/InvertingNumberedEdgeManager.java index 2931a8400..fff03b480 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/InvertingNumberedEdgeManager.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/InvertingNumberedEdgeManager.java @@ -29,50 +29,62 @@ public class InvertingNumberedEdgeManager implements NumberedEdgeManager { this.original = original; } + @Override public Iterator getPredNodes(T N) throws IllegalArgumentException{ return original.getSuccNodes(N); } + @Override public int getPredNodeCount(T N) throws IllegalArgumentException{ return original.getSuccNodeCount(N); } + @Override public Iterator getSuccNodes(T N) throws IllegalArgumentException{ return original.getPredNodes(N); } + @Override public int getSuccNodeCount(T N) throws IllegalArgumentException{ return original.getPredNodeCount(N); } + @Override public void addEdge(T src, T dst) throws IllegalArgumentException{ original.addEdge(dst, src); } + @Override public void removeEdge(T src, T dst)throws IllegalArgumentException { original.removeEdge(dst, src); } + @Override public boolean hasEdge(T src, T dst) { return original.hasEdge(dst, src); } + @Override public void removeAllIncidentEdges(T node) throws IllegalArgumentException{ original.removeAllIncidentEdges(node); } + @Override public void removeIncomingEdges(T node) throws IllegalArgumentException{ original.removeOutgoingEdges(node); } + @Override public void removeOutgoingEdges(T node) throws IllegalArgumentException{ original.removeIncomingEdges(node); } + @Override public IntSet getSuccNodeNumbers(T node) throws IllegalArgumentException{ return original.getPredNodeNumbers(node); } + @Override public IntSet getPredNodeNumbers(T node) throws IllegalArgumentException{ return original.getSuccNodeNumbers(node); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/NodeWithNumber.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/NodeWithNumber.java index 0fefceb43..5b33cb183 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/NodeWithNumber.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/NodeWithNumber.java @@ -26,10 +26,12 @@ public class NodeWithNumber implements INodeWithNumber { /** * @return the number which identifies this node in the numbered graph */ + @Override public int getGraphNodeId() { return number; } + @Override public void setGraphNodeId(int i) { number = i; } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/NodeWithNumberedEdges.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/NodeWithNumberedEdges.java index 07d33688f..44f6b6d73 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/NodeWithNumberedEdges.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/NodeWithNumberedEdges.java @@ -25,10 +25,12 @@ public class NodeWithNumberedEdges extends NodeWithNumber implements INodeWithNu private BimodalMutableIntSet succNumbers; + @Override public IntSet getSuccNumbers() { return succNumbers; } + @Override public IntSet getPredNumbers() { return predNumbers; } @@ -39,6 +41,7 @@ public class NodeWithNumberedEdges extends NodeWithNumber implements INodeWithNu * @param eqNumber * the equation number */ + @Override public void addSucc(int eqNumber) { if (succNumbers == null) { succNumbers = new BimodalMutableIntSet(); @@ -54,6 +57,7 @@ public class NodeWithNumberedEdges extends NodeWithNumber implements INodeWithNu * @param eqNumber * the equation number */ + @Override public void addPred(int eqNumber) { if (predNumbers == null) { predNumbers = new BimodalMutableIntSet(); @@ -95,15 +99,18 @@ public class NodeWithNumberedEdges extends NodeWithNumber implements INodeWithNu /* * @see com.ibm.wala.util.graph.INodeWithNumberedEdges#removeAllIncidentEdges() */ + @Override public void removeAllIncidentEdges() throws UnimplementedError { Assertions.UNREACHABLE("Implement me"); } + @Override public void removeIncomingEdges() throws UnimplementedError { Assertions.UNREACHABLE("Implement me"); } + @Override public void removeOutgoingEdges() throws UnimplementedError { Assertions.UNREACHABLE("Implement me"); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/NumberedNodeIterator.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/NumberedNodeIterator.java index fba3fc791..2d9156693 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/NumberedNodeIterator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/NumberedNodeIterator.java @@ -35,10 +35,12 @@ public class NumberedNodeIterator implements Iterator { this.nodeManager = nodeManager; } + @Override public boolean hasNext() { return numbers.hasNext(); } + @Override public T next() throws NoSuchElementException { int i = numbers.next(); T result = nodeManager.getNode(i); @@ -46,6 +48,7 @@ public class NumberedNodeIterator implements Iterator { return result; } + @Override public void remove() throws UnsupportedOperationException { throw new UnsupportedOperationException(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/SlowNumberedNodeManager.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/SlowNumberedNodeManager.java index e921728bd..685130f8d 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/SlowNumberedNodeManager.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/SlowNumberedNodeManager.java @@ -27,11 +27,13 @@ public class SlowNumberedNodeManager implements NumberedNodeManager { final private MutableMapping map = MutableMapping.make(); + @Override public int getNumber(T obj) { return map.getMappedIndex(obj); } + @Override public T getNode(int number) { if (number < 0) { throw new IllegalArgumentException("number must be >= 0"); @@ -43,20 +45,24 @@ public class SlowNumberedNodeManager implements NumberedNodeManager { /* * @see com.ibm.wala.util.graph.NumberedGraph#getMaxNumber() */ + @Override public int getMaxNumber() { return map.getMaximumIndex(); } + @Override public Iterator iterator() { return map.iterator(); } + @Override public int getNumberOfNodes() { return map.getSize(); } + @Override public void addNode(T n) { if (n == null) { throw new IllegalArgumentException("n is null"); @@ -67,6 +73,7 @@ public class SlowNumberedNodeManager implements NumberedNodeManager { /* * @see com.ibm.wala.util.graph.NodeManager#remove(com.ibm.wala.util.graph.Node) */ + @Override public void removeNode(T n) { map.deleteMappedObject(n); } @@ -85,6 +92,7 @@ public class SlowNumberedNodeManager implements NumberedNodeManager { /* * @see com.ibm.wala.util.graph.NodeManager#containsNode(com.ibm.wala.util.graph.Node) */ + @Override public boolean containsNode(T N) { return getNumber(N) != -1; } @@ -92,6 +100,7 @@ public class SlowNumberedNodeManager implements NumberedNodeManager { /* * @see com.ibm.wala.util.graph.NumberedNodeManager#iterateNodes(com.ibm.wala.util.intset.IntSet) */ + @Override public Iterator iterateNodes(IntSet s) { return new NumberedNodeIterator(s, this); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/SparseNumberedEdgeManager.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/SparseNumberedEdgeManager.java index 3050bbfb9..cc96bf775 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/SparseNumberedEdgeManager.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/SparseNumberedEdgeManager.java @@ -84,6 +84,7 @@ public final class SparseNumberedEdgeManager implements NumberedEdgeManager getPredNodes(T N) throws IllegalArgumentException { int number = nodeManager.getNumber(N); if (number < 0) { @@ -97,6 +98,7 @@ public final class SparseNumberedEdgeManager implements NumberedEdgeManager implements NumberedEdgeManager getSuccNodes(T N) throws IllegalArgumentException { int number = nodeManager.getNumber(N); if (number == -1) { @@ -127,6 +130,7 @@ public final class SparseNumberedEdgeManager implements NumberedEdgeManager implements NumberedEdgeManager implements NumberedEdgeManager implements NumberedEdgeManager implements NumberedEdgeManager implements NumberedEdgeManager implements NumberedEdgeManager implements NumberedEdgeManager implements NumberedEdgeManager implements NumberedEdgeManager implements NumberedEdgeManager implements NumberedEdgeManager implements NumberedEdgeManager extends AbstractGraph implem @Override protected abstract LabeledEdgeManager getEdgeManager(); + @Override public void addEdge(T src, T dst, U label) { getEdgeManager().addEdge(src, dst, label); } + @Override public Iterator getPredLabels(T N) { return getEdgeManager().getPredLabels(N); } + @Override public int getPredNodeCount(T N, U label) { return getEdgeManager().getPredNodeCount(N, label); } + @Override public Iterator getPredNodes(T N, U label) { return getEdgeManager().getPredNodes(N, label); } + @Override public Iterator getSuccLabels(T N) { return getEdgeManager().getSuccLabels(N); } + @Override public int getSuccNodeCount(T N, U label) { return getEdgeManager().getSuccNodeCount(N, label); } + @Override public Iterator getSuccNodes(T N, U label) { return getEdgeManager().getSuccNodes(N, label); } + @Override public boolean hasEdge(T src, T dst, U label) { return getEdgeManager().hasEdge(src, dst, label); } + @Override public void removeEdge(T src, T dst, U label) { getEdgeManager().removeEdge(src, dst, label); } + @Override public Set getEdgeLabels(T src, T dst) { return getEdgeManager().getEdgeLabels(src, dst); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/labeled/AbstractNumberedLabeledGraph.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/labeled/AbstractNumberedLabeledGraph.java index dc07ab309..c9221664e 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/labeled/AbstractNumberedLabeledGraph.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/labeled/AbstractNumberedLabeledGraph.java @@ -24,30 +24,37 @@ public abstract class AbstractNumberedLabeledGraph extends AbstractNumbere @Override protected abstract NumberedLabeledEdgeManager getEdgeManager(); + @Override public void addEdge(T src, T dst, U label) { getEdgeManager().addEdge(src, dst, label); } + @Override public Iterator getPredLabels(T N) { return getEdgeManager().getPredLabels(N); } + @Override public int getPredNodeCount(T N, U label) { return getEdgeManager().getPredNodeCount(N, label); } + @Override public Iterator getPredNodes(T N, U label) { return getEdgeManager().getPredNodes(N, label); } + @Override public Iterator getSuccLabels(T N) { return getEdgeManager().getSuccLabels(N); } + @Override public int getSuccNodeCount(T N, U label) { return getEdgeManager().getSuccNodeCount(N, label); } + @Override public Iterator getSuccNodes(T N, U label) { return getEdgeManager().getSuccNodes(N, label); } @@ -60,18 +67,22 @@ public abstract class AbstractNumberedLabeledGraph extends AbstractNumbere return getEdgeManager().getSuccNodeNumbers(node, label); } + @Override public boolean hasEdge(T src, T dst, U label) { return getEdgeManager().hasEdge(src, dst, label); } + @Override public void removeEdge(T src, T dst, U label) { getEdgeManager().removeEdge(src, dst, label); } + @Override public Set getEdgeLabels(T src, T dst) { return getEdgeManager().getEdgeLabels(src, dst); } + @Override public U getDefaultLabel() { return getEdgeManager().getDefaultLabel(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/labeled/SparseNumberedLabeledEdgeManager.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/labeled/SparseNumberedLabeledEdgeManager.java index a2688ffbd..73115b033 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/labeled/SparseNumberedLabeledEdgeManager.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/labeled/SparseNumberedLabeledEdgeManager.java @@ -95,6 +95,7 @@ public class SparseNumberedLabeledEdgeManager implements NumberedLabeledEd * @see util.LabelledEdgeManager#addEdge(java.lang.Object, java.lang.Object, * java.lang.Object) */ + @Override public void addEdge(T src, T dst, U label) { nodeToSuccLabels.put(src, label); nodeToPredLabels.put(dst, label); @@ -105,6 +106,7 @@ public class SparseNumberedLabeledEdgeManager implements NumberedLabeledEd * @see util.LabelledEdgeManager#getPredNodeCount(java.lang.Object, * java.lang.Object) */ + @Override public int getPredNodeCount(T N, U label) { return getManagerForLabel(label).getPredNodeCount(N); } @@ -113,6 +115,7 @@ public class SparseNumberedLabeledEdgeManager implements NumberedLabeledEd * @see util.LabelledEdgeManager#getPredNodes(java.lang.Object, * java.lang.Object) */ + @Override public Iterator getPredNodes(T N, U label) { return getManagerForLabel(label).getPredNodes(N); } @@ -121,6 +124,7 @@ public class SparseNumberedLabeledEdgeManager implements NumberedLabeledEd * @see util.LabelledEdgeManager#getSuccNodeCount(java.lang.Object, * java.lang.Object) */ + @Override public int getSuccNodeCount(T N, U label) { return getManagerForLabel(label).getSuccNodeCount(N); } @@ -129,6 +133,7 @@ public class SparseNumberedLabeledEdgeManager implements NumberedLabeledEd * @see util.LabelledEdgeManager#getSuccNodes(java.lang.Object, * java.lang.Object) */ + @Override public Iterator getSuccNodes(T N, U label) { return getManagerForLabel(label).getSuccNodes(N); } @@ -137,6 +142,7 @@ public class SparseNumberedLabeledEdgeManager implements NumberedLabeledEd * @see util.LabelledEdgeManager#hasEdge(java.lang.Object, java.lang.Object, * java.lang.Object) */ + @Override public boolean hasEdge(T src, T dst, U label) { return getManagerForLabel(label).hasEdge(src, dst); } @@ -146,6 +152,7 @@ public class SparseNumberedLabeledEdgeManager implements NumberedLabeledEd * * @see util.LabelledEdgeManager#removeAllIncidentEdges(java.lang.Object) */ + @Override public void removeAllIncidentEdges(T node) { removeIncomingEdges(node); removeOutgoingEdges(node); @@ -155,6 +162,7 @@ public class SparseNumberedLabeledEdgeManager implements NumberedLabeledEd * @see util.LabelledEdgeManager#removeEdge(java.lang.Object, * java.lang.Object, java.lang.Object) */ + @Override public void removeEdge(T src, T dst, U label) throws IllegalArgumentException { getManagerForLabel(label).removeEdge(src, dst); } @@ -162,6 +170,7 @@ public class SparseNumberedLabeledEdgeManager implements NumberedLabeledEd /* * @see util.LabelledEdgeManager#removeIncomingEdges(java.lang.Object) */ + @Override public void removeIncomingEdges(T node) throws IllegalArgumentException { for (Iterator inLabelIter = nodeToPredLabels.get(node).iterator(); inLabelIter.hasNext();) { U label = inLabelIter.next(); @@ -173,6 +182,7 @@ public class SparseNumberedLabeledEdgeManager implements NumberedLabeledEd /* * @see util.LabelledEdgeManager#removeOutgoingEdges(java.lang.Object) */ + @Override public void removeOutgoingEdges(T node) throws IllegalArgumentException { for (Iterator outLabelIter = nodeToSuccLabels.get(node).iterator(); outLabelIter.hasNext();) { U label = outLabelIter.next(); @@ -193,14 +203,17 @@ public class SparseNumberedLabeledEdgeManager implements NumberedLabeledEd } } + @Override public Iterator getPredLabels(T N) { return nodeToPredLabels.get(N).iterator(); } + @Override public Iterator getSuccLabels(T N) { return nodeToSuccLabels.get(N).iterator(); } + @Override public Set getEdgeLabels(T src, T dst) { Set labels = HashSetFactory.make(); @@ -213,10 +226,12 @@ public class SparseNumberedLabeledEdgeManager implements NumberedLabeledEd return labels; } + @Override public void addEdge(T src, T dst) { addEdge(src, dst, defaultLabel); } + @Override public int getPredNodeCount(T N) { int count = 0; for (U label : nodeToPredLabels.get(N)) { @@ -225,6 +240,7 @@ public class SparseNumberedLabeledEdgeManager implements NumberedLabeledEd return count; } + @Override public Iterator getPredNodes(T N) { Collection preds = HashSetFactory.make(); for (U label : nodeToPredLabels.get(N)) { @@ -233,6 +249,7 @@ public class SparseNumberedLabeledEdgeManager implements NumberedLabeledEd return preds.iterator(); } + @Override public int getSuccNodeCount(T N) { int count = 0; for (U label : nodeToSuccLabels.get(N)) { @@ -241,6 +258,7 @@ public class SparseNumberedLabeledEdgeManager implements NumberedLabeledEd return count; } + @Override public Iterator getSuccNodes(T N) { Collection succs = HashSetFactory.make(); for (U label : nodeToSuccLabels.get(N)) { @@ -249,26 +267,32 @@ public class SparseNumberedLabeledEdgeManager implements NumberedLabeledEd return succs.iterator(); } + @Override public boolean hasEdge(T src, T dst) { return hasEdge(src, dst, defaultLabel); } + @Override public void removeEdge(T src, T dst) throws UnsupportedOperationException { removeEdge(src, dst, defaultLabel); } + @Override public U getDefaultLabel() { return defaultLabel; } + @Override public IntSet getPredNodeNumbers(T node, U label) throws IllegalArgumentException { return getManagerForLabel(label).getPredNodeNumbers(node); } + @Override public IntSet getSuccNodeNumbers(T node, U label) throws IllegalArgumentException { return getManagerForLabel(label).getSuccNodeNumbers(node); } + @Override public IntSet getPredNodeNumbers(T node) { BitVectorIntSet preds = new BitVectorIntSet(); @@ -279,6 +303,7 @@ public class SparseNumberedLabeledEdgeManager implements NumberedLabeledEd return preds; } + @Override public IntSet getSuccNodeNumbers(T node) { BitVectorIntSet succs = new BitVectorIntSet(); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BFSIterator.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BFSIterator.java index 407121b7b..4c6346603 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BFSIterator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BFSIterator.java @@ -119,6 +119,7 @@ public class BFSIterator implements Iterator { * * @return true if there nodes left to enumerate. */ + @Override public boolean hasNext() { return (Q.size() > index); } @@ -128,6 +129,7 @@ public class BFSIterator implements Iterator { * * @return the next graph node in discover time order. */ + @Override public T next() throws NoSuchElementException { if (index >= Q.size()) { throw new NoSuchElementException(); @@ -155,6 +157,7 @@ public class BFSIterator implements Iterator { /** * @see java.util.Iterator#remove() */ + @Override public void remove() throws UnimplementedError { throw new UnimplementedError(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BFSPathFinder.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BFSPathFinder.java index 409036e21..7ecb4c2b9 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BFSPathFinder.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BFSPathFinder.java @@ -84,6 +84,7 @@ public class BFSPathFinder { throw new IllegalArgumentException("src is not in graph " + src); } this.filter = new Filter() { + @Override public boolean accepts(T o) { return target.equals(o); } @@ -108,6 +109,7 @@ public class BFSPathFinder { this.roots = new NonNullSingletonIterator(src); this.filter = new Filter() { + @Override public boolean accepts(T o) { return ts.contains(o); } @@ -129,6 +131,7 @@ public class BFSPathFinder { this.G = G; this.roots = sources; this.filter = new Filter() { + @Override public boolean accepts(T o) { return target.equals(o); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BoundedBFSIterator.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BoundedBFSIterator.java index 0a0b1e1f5..b69ac43d6 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BoundedBFSIterator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BoundedBFSIterator.java @@ -141,6 +141,7 @@ public class BoundedBFSIterator implements Iterator { * * @return true if there nodes left to enumerate. */ + @Override public boolean hasNext() { return (Q.size() > index); } @@ -150,6 +151,7 @@ public class BoundedBFSIterator implements Iterator { * * @return the next graph node in discover time order. */ + @Override public T next() throws NoSuchElementException { if (!hasNext()) { throw new NoSuchElementException(); @@ -180,6 +182,7 @@ public class BoundedBFSIterator implements Iterator { /** * @see java.util.Iterator#remove() */ + @Override public void remove() throws UnsupportedOperationException { throw new UnsupportedOperationException(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFS.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFS.java index 8dfb72873..2869b5a9e 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFS.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFS.java @@ -126,6 +126,7 @@ public class DFS { this.order = order; } + @Override public int compare(T o1, T o2) { // throws an exception if either argument is not a Node object if (o1 == o2) { diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSDiscoverTimeIterator.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSDiscoverTimeIterator.java index bdbc00866..7fca8996d 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSDiscoverTimeIterator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSDiscoverTimeIterator.java @@ -56,6 +56,7 @@ public abstract class DFSDiscoverTimeIterator extends Stack implements Ite * * @return true if there nodes left to enumerate. */ + @Override public boolean hasNext() { return (!empty()); } @@ -69,6 +70,7 @@ public abstract class DFSDiscoverTimeIterator extends Stack implements Ite * * @return the next graph node in discover time order. */ + @Override public T next() throws NoSuchElementException { if (empty()) { @@ -122,6 +124,7 @@ public abstract class DFSDiscoverTimeIterator extends Stack implements Ite */ abstract protected Iterator getConnected(T n); + @Override public void remove() throws UnimplementedError { throw new UnimplementedError(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSFinishTimeIterator.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSFinishTimeIterator.java index 3b38a8371..040e226d2 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSFinishTimeIterator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSFinishTimeIterator.java @@ -58,6 +58,7 @@ public abstract class DFSFinishTimeIterator extends Stack implements Itera * * @return true if there nodes left to enumerate. */ + @Override public boolean hasNext() { return (!empty() || (theNextElement != null && getPendingChildren(theNextElement) == null)); } @@ -71,6 +72,7 @@ public abstract class DFSFinishTimeIterator extends Stack implements Itera * * @return the next graph node in finishing time order. */ + @Override @SuppressWarnings("unchecked") public T next() throws NoSuchElementException { if (!hasNext()) { @@ -122,6 +124,7 @@ public abstract class DFSFinishTimeIterator extends Stack implements Itera /** * @see java.util.Iterator#remove() */ + @Override public void remove() throws UnimplementedError { throw new UnimplementedError(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/FloydWarshall.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/FloydWarshall.java index ca342959e..25b03fab2 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/FloydWarshall.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/FloydWarshall.java @@ -22,6 +22,13 @@ import com.ibm.wala.util.intset.IntSetAction; import com.ibm.wala.util.intset.IntSetUtil; import com.ibm.wala.util.intset.MutableIntSet; +/** + * Floyd-Warshall algorithm to compute all-pairs shortest path in graph with no negative cycles. + * + * TODO: this API should be cleaned up. + * + * @param node type in the graph + */ public class FloydWarshall { public interface GetPath { @@ -46,7 +53,7 @@ public class FloydWarshall { } - int[][] allPairsShortestPaths() { + public int[][] allPairsShortestPaths() { final int[][] result = new int[G.getNumberOfNodes()][G.getNumberOfNodes()]; for(int i = 0; i < result.length; i++) { @@ -59,6 +66,7 @@ public class FloydWarshall { final int fn = G.getNumber(from); IntSet tos = G.getSuccNodeNumbers(from); tos.foreach(new IntSetAction() { + @Override public void act(int x) { result[fn][x] = edgeCost(fn, x); } @@ -107,6 +115,7 @@ public class FloydWarshall { final int[][] paths = allPairsShortestPaths(); return new GetPath() { + @Override public List getPath(T from, T to) { int fn = G.getNumber(from); int tn = G.getNumber(to); @@ -145,7 +154,8 @@ public class FloydWarshall { private GetPaths doit() { final int[][] paths = allPairsShortestPaths(); return new GetPaths() { - public Set> getPaths(final T from, final T to) { + @Override + public Set> getPaths(final T from, final T to) { int fn = G.getNumber(from); int tn = G.getNumber(to); if (paths[fn][tn] == Integer.MAX_VALUE) { @@ -159,6 +169,7 @@ public class FloydWarshall { final Set> result = new HashSet>(); intermediate.foreach(new IntSetAction() { + @Override public void act(int x) { T in = G.getNode(x); for(List pre : getPaths(from, in)) { diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/SCCIterator.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/SCCIterator.java index eea0aee7b..b82367242 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/SCCIterator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/SCCIterator.java @@ -57,6 +57,7 @@ public class SCCIterator implements Iterator> { /** * Determine whether there are any more SCCs remaining in this enumeration. */ + @Override public boolean hasNext() { return rev.hasNext(); } @@ -64,6 +65,7 @@ public class SCCIterator implements Iterator> { /** * Find the next SCC in this enumeration */ + @Override public Set next() throws NoSuchElementException { Set currentSCC = HashSetFactory.make(); @@ -78,6 +80,7 @@ public class SCCIterator implements Iterator> { } + @Override public void remove() throws UnsupportedOperationException { throw new UnsupportedOperationException(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/heapTrace/HeapTracer.java b/com.ibm.wala.util/src/com/ibm/wala/util/heapTrace/HeapTracer.java index 9ad8c6f85..ee2c2d24e 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/heapTrace/HeapTracer.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/heapTrace/HeapTracer.java @@ -698,7 +698,8 @@ public class HeapTracer { * @see java.util.Comparator#compare(java.lang.Object, * java.lang.Object) */ - public int compare(Object o1, Object o2) { + @Override + public int compare(Object o1, Object o2) { Integer i1 = sizeCount.get(o1); Integer i2 = sizeCount.get(o2); return i2.intValue() - i1.intValue(); @@ -803,7 +804,8 @@ public class HeapTracer { * @see java.util.Comparator#compare(java.lang.Object, * java.lang.Object) */ - public int compare(Field o1, Field o2) { + @Override + public int compare(Field o1, Field o2) { Demographics d1 = roots.get(o1); Demographics d2 = roots.get(o2); return d2.getTotalSize() - d1.getTotalSize(); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/intset/BasicNaturalRelation.java b/com.ibm.wala.util/src/com/ibm/wala/util/intset/BasicNaturalRelation.java index d3a40f059..d3e06c52e 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/intset/BasicNaturalRelation.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/intset/BasicNaturalRelation.java @@ -122,6 +122,7 @@ public final class BasicNaturalRelation implements IBinaryNaturalRelation { * * @return true iff the relation changes as a result of this call. */ + @Override public boolean add(int x, int y) throws IllegalArgumentException { if (x < 0) { throw new IllegalArgumentException("illegal x: " + x); @@ -173,6 +174,7 @@ public final class BasicNaturalRelation implements IBinaryNaturalRelation { return smallStore[0].get(x) == DELEGATE_CODE; } + @Override public Iterator iterator() { return new TotalIterator(); } @@ -223,10 +225,12 @@ public final class BasicNaturalRelation implements IBinaryNaturalRelation { } } + @Override public boolean hasNext() { return nextX != -1; } + @Override public IntPair next() { IntPair result = null; if (nextIndex == smallStore.length) { @@ -246,6 +250,7 @@ public final class BasicNaturalRelation implements IBinaryNaturalRelation { return result; } + @Override public void remove() { Assertions.UNREACHABLE(); } @@ -260,6 +265,7 @@ public final class BasicNaturalRelation implements IBinaryNaturalRelation { * @param x * @return true iff there exists pair (x,y) for some y */ + @Override public boolean anyRelated(int x) { return smallStore[0].get(x) != EMPTY_CODE; } @@ -267,6 +273,7 @@ public final class BasicNaturalRelation implements IBinaryNaturalRelation { /* * @see com.ibm.wala.util.intset.IBinaryNonNegativeIntRelation#getRelated(int) */ + @Override public IntSet getRelated(int x) { if (DEBUG) { assert x >= 0; @@ -310,6 +317,7 @@ public final class BasicNaturalRelation implements IBinaryNaturalRelation { /* * @see com.ibm.wala.util.intset.IBinaryNonNegativeIntRelation#getRelatedCount(int) */ + @Override public int getRelatedCount(int x) throws IllegalArgumentException { if (x < 0) { throw new IllegalArgumentException("x must be greater than zero"); @@ -332,6 +340,7 @@ public final class BasicNaturalRelation implements IBinaryNaturalRelation { } } + @Override public void remove(int x, int y) { if (x < 0) { throw new IllegalArgumentException("illegal x: " + x); @@ -365,6 +374,7 @@ public final class BasicNaturalRelation implements IBinaryNaturalRelation { } } + @Override public void removeAll(int x) { for (int i = 0; i < smallStore.length; i++) { smallStore[i].set(x, EMPTY_CODE); @@ -375,6 +385,7 @@ public final class BasicNaturalRelation implements IBinaryNaturalRelation { /* * @see com.ibm.wala.util.debug.VerboseAction#performVerboseAction() */ + @Override public void performVerboseAction() { if (VERBOSE) { System.err.println((getClass() + " stats:")); @@ -401,6 +412,7 @@ public final class BasicNaturalRelation implements IBinaryNaturalRelation { return result; } + @Override public boolean contains(int x, int y) { if (x < 0) { throw new IllegalArgumentException("invalid x: " + x); @@ -420,6 +432,7 @@ public final class BasicNaturalRelation implements IBinaryNaturalRelation { } } + @Override public int maxKeyValue() { return maxX; } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/intset/BimodalMutableIntSet.java b/com.ibm.wala.util/src/com/ibm/wala/util/intset/BimodalMutableIntSet.java index 7a50ea1c4..c8e6efc85 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/intset/BimodalMutableIntSet.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/intset/BimodalMutableIntSet.java @@ -23,6 +23,7 @@ public class BimodalMutableIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.MutableIntSet#copySet(com.ibm.wala.util.intset.IntSet) */ + @Override public void copySet(IntSet set) { if (set == null) { throw new IllegalArgumentException("null set"); @@ -56,6 +57,7 @@ public class BimodalMutableIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.MutableIntSet#addAll(com.ibm.wala.util.intset.IntSet) */ + @Override public boolean addAll(IntSet set) { if (set instanceof BitVectorIntSet && !(impl instanceof BitVectorIntSet)) { // change the representation before performing the operation @@ -71,6 +73,7 @@ public class BimodalMutableIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.MutableIntSet#addAll(com.ibm.wala.util.intset.IntSet) */ + @Override public boolean addAllInIntersection(IntSet other, IntSet filter) { if (other instanceof BitVectorIntSet && !(impl instanceof BitVectorIntSet)) { // change the representation before performing the operation @@ -117,6 +120,7 @@ public class BimodalMutableIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.MutableIntSet#add(int) */ + @Override public boolean add(int i) { boolean result = impl.add(i); if (result) { @@ -128,6 +132,7 @@ public class BimodalMutableIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.MutableIntSet#remove(int) */ + @Override public boolean remove(int i) { boolean result = impl.remove(i); maybeChangeRepresentation(); @@ -137,6 +142,7 @@ public class BimodalMutableIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.MutableIntSet#intersectWith(com.ibm.wala.util.intset.IntSet) */ + @Override public void intersectWith(IntSet set) throws UnimplementedError { if (set == null) { throw new IllegalArgumentException("null set"); @@ -152,6 +158,7 @@ public class BimodalMutableIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#contains(int) */ + @Override public boolean contains(int i) { return impl.contains(i); } @@ -159,6 +166,7 @@ public class BimodalMutableIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#intersection(com.ibm.wala.util.intset.IntSet) */ + @Override public IntSet intersection(IntSet that) throws UnimplementedError { if (that instanceof BimodalMutableIntSet) { BimodalMutableIntSet b = (BimodalMutableIntSet) that; @@ -174,6 +182,7 @@ public class BimodalMutableIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#union(com.ibm.wala.util.intset.IntSet) */ + @Override public IntSet union(IntSet that) { BimodalMutableIntSet temp = new BimodalMutableIntSet(); temp.addAll(this); @@ -185,6 +194,7 @@ public class BimodalMutableIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#isEmpty() */ + @Override public boolean isEmpty() { return impl.isEmpty(); } @@ -192,6 +202,7 @@ public class BimodalMutableIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#size() */ + @Override public int size() { return impl.size(); } @@ -199,6 +210,7 @@ public class BimodalMutableIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#iterator() */ + @Override public IntIterator intIterator() { return impl.intIterator(); } @@ -206,6 +218,7 @@ public class BimodalMutableIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#foreach(com.ibm.wala.util.intset.IntSetAction) */ + @Override public void foreach(IntSetAction action) { impl.foreach(action); } @@ -213,6 +226,7 @@ public class BimodalMutableIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#foreachExcluding(com.ibm.wala.util.intset.IntSet, com.ibm.wala.util.intset.IntSetAction) */ + @Override public void foreachExcluding(IntSet X, IntSetAction action) { impl.foreachExcluding(X, action); } @@ -220,6 +234,7 @@ public class BimodalMutableIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#max() */ + @Override public int max() throws IllegalStateException { return impl.max(); } @@ -259,6 +274,7 @@ public class BimodalMutableIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.MutableIntSet#clear() */ + @Override public void clear() { impl = MutableSparseIntSet.makeEmpty(); } @@ -278,6 +294,7 @@ public class BimodalMutableIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#sameValue(com.ibm.wala.util.intset.IntSet) */ + @Override public boolean sameValue(IntSet that) { return impl.sameValue(that); } @@ -285,6 +302,7 @@ public class BimodalMutableIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#isSubset(com.ibm.wala.util.intset.SparseIntSet) */ + @Override public boolean isSubset(IntSet that) throws IllegalArgumentException { if (that == null) { throw new IllegalArgumentException("that == null"); @@ -316,6 +334,7 @@ public class BimodalMutableIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#containsAny(com.ibm.wala.util.intset.IntSet) */ + @Override public boolean containsAny(IntSet that) throws IllegalArgumentException, UnimplementedError { if (that == null) { throw new IllegalArgumentException("that == null"); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/intset/BimodalMutableIntSetFactory.java b/com.ibm.wala.util/src/com/ibm/wala/util/intset/BimodalMutableIntSetFactory.java index dde8b860f..02143a90e 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/intset/BimodalMutableIntSetFactory.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/intset/BimodalMutableIntSetFactory.java @@ -22,6 +22,7 @@ public class BimodalMutableIntSetFactory implements MutableIntSetFactory { } } + @Override public boolean hasNext() { return (next != -1); } + @Override public T next() { T result = map.getMappedObject(next); int start = next + 1; @@ -172,6 +174,7 @@ public final class BitSet { return result; } + @Override public void remove() { Assertions.UNREACHABLE(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/intset/BitVectorIntSet.java b/com.ibm.wala.util/src/com/ibm/wala/util/intset/BitVectorIntSet.java index c1bd4747a..59442bd83 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/intset/BitVectorIntSet.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/intset/BitVectorIntSet.java @@ -48,6 +48,7 @@ public final class BitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.MutableIntSet#clear() */ + @Override public void clear() { bitVector.clearAll(); populationCount = 0; @@ -56,6 +57,7 @@ public final class BitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.MutableIntSet#copySet(com.ibm.wala.util.intset.IntSet) */ + @Override public void copySet(IntSet set) throws IllegalArgumentException { if (set == null) { throw new IllegalArgumentException("set == null"); @@ -93,6 +95,7 @@ public final class BitVectorIntSet implements MutableIntSet { } + @Override public boolean addAll(IntSet set) { if (set instanceof BitVectorIntSet) { BitVector B = ((BitVectorIntSet) set).bitVector; @@ -128,6 +131,7 @@ public final class BitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.MutableIntSet#add(int) */ + @Override public boolean add(int i) { if (bitVector.get(i)) { return false; @@ -142,6 +146,7 @@ public final class BitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.MutableIntSet#remove(int) */ + @Override public boolean remove(int i) { if (contains(i)) { populationCount--; @@ -156,6 +161,7 @@ public final class BitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.MutableIntSet#intersectWith(com.ibm.wala.util.intset.IntSet) */ + @Override public void intersectWith(IntSet set) { if (!(set instanceof BitVectorIntSet)) { set = new BitVectorIntSet(set); @@ -168,6 +174,7 @@ public final class BitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#intersection(com.ibm.wala.util.intset.IntSet) */ + @Override public IntSet intersection(IntSet that) { BitVectorIntSet newbie = new BitVectorIntSet(); newbie.copySet(this); @@ -178,6 +185,7 @@ public final class BitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#union(com.ibm.wala.util.intset.IntSet) */ + @Override public IntSet union(IntSet that) { BitVectorIntSet temp = new BitVectorIntSet(); temp.addAll(this); @@ -189,6 +197,7 @@ public final class BitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#isEmpty() */ + @Override public boolean isEmpty() { return size() == 0; } @@ -196,6 +205,7 @@ public final class BitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#size() */ + @Override public int size() { populationCount = (populationCount == UNDEFINED) ? bitVector.populationCount() : populationCount; return populationCount; @@ -204,6 +214,7 @@ public final class BitVectorIntSet implements MutableIntSet { /** * Use with extreme care; doesn't detect ConcurrentModificationExceptions */ + @Override public IntIterator intIterator() { populationCount = (populationCount == UNDEFINED) ? bitVector.populationCount() : populationCount; return new IntIterator() { @@ -211,10 +222,12 @@ public final class BitVectorIntSet implements MutableIntSet { int last = 0; + @Override public boolean hasNext() { return count < populationCount; } + @Override public int next() { count++; last = nextSetBit(last) + 1; @@ -226,6 +239,7 @@ public final class BitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#foreach(com.ibm.wala.util.intset.IntSetAction) */ + @Override public void foreach(IntSetAction action) { if (action == null) { throw new IllegalArgumentException("null action"); @@ -252,6 +266,7 @@ public final class BitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#foreach(com.ibm.wala.util.intset.IntSetAction) */ + @Override public void foreachExcluding(IntSet X, IntSetAction action) { if (X instanceof BitVectorIntSet) { fastForeachExcluding((BitVectorIntSet) X, action); @@ -309,6 +324,7 @@ public final class BitVectorIntSet implements MutableIntSet { } } + @Override public boolean contains(int i) { if (i < 0) { throw new IllegalArgumentException("invalid i: " + i) ; @@ -316,6 +332,7 @@ public final class BitVectorIntSet implements MutableIntSet { return bitVector.get(i); } + @Override public int max() { return bitVector.max(); } @@ -335,6 +352,7 @@ public final class BitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#sameValue(com.ibm.wala.util.intset.IntSet) */ + @Override public boolean sameValue(IntSet that) throws IllegalArgumentException, UnimplementedError { if (that == null) { throw new IllegalArgumentException("that == null"); @@ -373,6 +391,7 @@ public final class BitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#isSubset(com.ibm.wala.util.intset.IntSet) */ + @Override public boolean isSubset(IntSet that) { if (that instanceof BitVectorIntSet) { return bitVector.isSubset(((BitVectorIntSet) that).bitVector); @@ -427,6 +446,7 @@ public final class BitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#containsAny(com.ibm.wala.util.intset.IntSet) */ + @Override public boolean containsAny(IntSet set) throws IllegalArgumentException { if (set == null) { throw new IllegalArgumentException("set == null"); @@ -449,6 +469,7 @@ public final class BitVectorIntSet implements MutableIntSet { * @see com.ibm.wala.util.intset.MutableIntSet#addAllInIntersection(com.ibm.wala.util.intset.IntSet, * com.ibm.wala.util.intset.IntSet) */ + @Override public boolean addAllInIntersection(IntSet other, IntSet filter) throws IllegalArgumentException { if (other == null) { throw new IllegalArgumentException("other == null"); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/intset/BitVectorIntSetFactory.java b/com.ibm.wala.util/src/com/ibm/wala/util/intset/BitVectorIntSetFactory.java index 2fdd4404a..aa3467463 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/intset/BitVectorIntSetFactory.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/intset/BitVectorIntSetFactory.java @@ -21,6 +21,7 @@ public class BitVectorIntSetFactory implements MutableIntSetFactorythis has the same value as that. */ + @Override public boolean sameValue(IntSet that) { if (that instanceof DebuggingMutableIntSet) { DebuggingMutableIntSet db = (DebuggingMutableIntSet) that; @@ -176,6 +187,7 @@ class DebuggingMutableIntSet implements MutableIntSet { /** * @return true iff this is a subset of that. */ + @Override public boolean isSubset(IntSet that) { if (that instanceof DebuggingMutableIntSet) { DebuggingMutableIntSet db = (DebuggingMutableIntSet) that; @@ -194,6 +206,7 @@ class DebuggingMutableIntSet implements MutableIntSet { /** * Set the value of this to be the same as the value of set */ + @Override public void copySet(IntSet set) { if (set instanceof DebuggingMutableIntSet) { DebuggingMutableIntSet db = (DebuggingMutableIntSet) set; @@ -211,6 +224,7 @@ class DebuggingMutableIntSet implements MutableIntSet { * * @return true iff the value of this changes. */ + @Override public boolean addAll(IntSet set) { if (set instanceof DebuggingMutableIntSet) { DebuggingMutableIntSet db = (DebuggingMutableIntSet) set; @@ -236,6 +250,7 @@ class DebuggingMutableIntSet implements MutableIntSet { /** * Intersect this with another set. */ + @Override public void intersectWith(IntSet set) { if (set instanceof DebuggingMutableIntSet) { DebuggingMutableIntSet db = (DebuggingMutableIntSet) set; @@ -252,6 +267,7 @@ class DebuggingMutableIntSet implements MutableIntSet { /** */ + @Override public boolean addAllInIntersection(IntSet other, IntSet filter) { if (other instanceof DebuggingMutableIntSet && filter instanceof DebuggingMutableIntSet) { DebuggingMutableIntSet db = (DebuggingMutableIntSet) other; @@ -271,6 +287,7 @@ class DebuggingMutableIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#intIterator() */ + @Override public IntIterator intIterator() { MutableSparseIntSet bits = MutableSparseIntSet.makeEmpty(); for (IntIterator pi = primaryImpl.intIterator(); pi.hasNext();) { @@ -291,15 +308,18 @@ class DebuggingMutableIntSet implements MutableIntSet { /** * Invoke an action on each element of the Set */ + @Override public void foreach(IntSetAction action) { final Set bits = HashSetFactory.make(); primaryImpl.foreach(new IntSetAction() { + @Override public void act(int x) { assert !bits.contains(new Integer(x)); bits.add(new Integer(x)); } }); secondaryImpl.foreach(new IntSetAction() { + @Override public void act(int x) { assert bits.contains(new Integer(x)); bits.remove(new Integer(x)); @@ -313,15 +333,18 @@ class DebuggingMutableIntSet implements MutableIntSet { /** * Invoke an action on each element of the Set, excluding elements of Set X */ + @Override public void foreachExcluding(IntSet X, IntSetAction action) { final Set bits = HashSetFactory.make(); primaryImpl.foreachExcluding(X, new IntSetAction() { + @Override public void act(int x) { assert !bits.contains(new Integer(x)); bits.add(new Integer(x)); } }); secondaryImpl.foreachExcluding(X, new IntSetAction() { + @Override public void act(int x) { assert bits.contains(new Integer(x)); bits.remove(new Integer(x)); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/intset/DebuggingMutableIntSetFactory.java b/com.ibm.wala.util/src/com/ibm/wala/util/intset/DebuggingMutableIntSetFactory.java index a993a0ec3..2286a1747 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/intset/DebuggingMutableIntSetFactory.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/intset/DebuggingMutableIntSetFactory.java @@ -38,6 +38,7 @@ public class DebuggingMutableIntSetFactory implements MutableIntSetFactory implements OrdinalSetMapping { nextIndex = 0; } + @Override @SuppressWarnings("unchecked") public T getMappedObject(int n) { try { @@ -69,6 +70,7 @@ public class MutableMapping implements OrdinalSetMapping { } } + @Override public int getMappedIndex(T o) { Integer I = map.get(o); if (I == null) { @@ -79,6 +81,7 @@ public class MutableMapping implements OrdinalSetMapping { } + @Override public boolean hasMappedIndex(T o) { return map.get(o) != null; } @@ -88,6 +91,7 @@ public class MutableMapping implements OrdinalSetMapping { * * @return the integer to which the object is mapped. */ + @Override public int add(T o) { Integer I = map.get(o); if (I != null) { @@ -116,6 +120,7 @@ public class MutableMapping implements OrdinalSetMapping { /* * @see com.ibm.wala.util.intset.OrdinalSetMapping#iterator() */ + @Override public Iterator iterator() { return map.keySet().iterator(); } @@ -175,10 +180,12 @@ public class MutableMapping implements OrdinalSetMapping { } + @Override public int getMaximumIndex() { return nextIndex - 1; } + @Override public int getSize() { return map.size(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSharedBitVectorIntSet.java b/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSharedBitVectorIntSet.java index e06dda492..c69aa9917 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSharedBitVectorIntSet.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSharedBitVectorIntSet.java @@ -163,6 +163,7 @@ public class MutableSharedBitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#contains(int) */ + @Override public boolean contains(int i) { if (privatePart != null && privatePart.contains(i)) { return true; @@ -176,6 +177,7 @@ public class MutableSharedBitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#intersection(com.ibm.wala.util.intset.IntSet) */ + @Override public IntSet intersection(IntSet that) { if (that == null) { throw new IllegalArgumentException("null that"); @@ -204,6 +206,7 @@ public class MutableSharedBitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#union(com.ibm.wala.util.intset.IntSet) */ + @Override public IntSet union(IntSet that) { MutableSharedBitVectorIntSet temp = new MutableSharedBitVectorIntSet(); temp.addAll(this); @@ -228,6 +231,7 @@ public class MutableSharedBitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#isEmpty() */ + @Override public boolean isEmpty() { return privatePart == null && sharedPart == null; } @@ -235,6 +239,7 @@ public class MutableSharedBitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#size() */ + @Override public int size() { int result = 0; result += (privatePart == null) ? 0 : privatePart.size(); @@ -245,6 +250,7 @@ public class MutableSharedBitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#iterator() */ + @Override public IntIterator intIterator() { if (privatePart == null) { return (sharedPart == null) ? EmptyIntIterator.instance() : sharedPart.intIterator(); @@ -257,6 +263,7 @@ public class MutableSharedBitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#foreach(com.ibm.wala.util.intset.IntSetAction) */ + @Override public void foreach(IntSetAction action) { if (privatePart != null) { privatePart.foreach(action); @@ -269,6 +276,7 @@ public class MutableSharedBitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#foreachExcluding(com.ibm.wala.util.intset.IntSet, com.ibm.wala.util.intset.IntSetAction) */ + @Override public void foreachExcluding(IntSet X, IntSetAction action) { if (X instanceof MutableSharedBitVectorIntSet) { foreachExcludingInternal((MutableSharedBitVectorIntSet) X, action); @@ -315,6 +323,7 @@ public class MutableSharedBitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#max() */ + @Override public int max() { int result = -1; if (privatePart != null && privatePart.size() > 0) { @@ -329,6 +338,7 @@ public class MutableSharedBitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#sameValue(com.ibm.wala.util.intset.IntSet) */ + @Override public boolean sameValue(IntSet that) throws IllegalArgumentException, UnimplementedError { if (that == null) { throw new IllegalArgumentException("that == null"); @@ -461,6 +471,7 @@ public class MutableSharedBitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#isSubset(com.ibm.wala.util.intset.IntSet) */ + @Override public boolean isSubset(IntSet that) { if (that == null) { throw new IllegalArgumentException("null that"); @@ -572,6 +583,7 @@ public class MutableSharedBitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.MutableIntSet#copySet(com.ibm.wala.util.intset.IntSet) */ + @Override public void copySet(IntSet set) { if (set instanceof MutableSharedBitVectorIntSet) { MutableSharedBitVectorIntSet other = (MutableSharedBitVectorIntSet) set; @@ -595,6 +607,7 @@ public class MutableSharedBitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.MutableIntSet#addAll(com.ibm.wala.util.intset.IntSet) */ + @Override public boolean addAll(IntSet set) throws IllegalArgumentException { if (set == null) { throw new IllegalArgumentException("set == null"); @@ -775,6 +788,7 @@ public class MutableSharedBitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.MutableIntSet#add(int) */ + @Override public boolean add(int i) { if (privatePart == null) { if (sharedPart == null) { @@ -810,6 +824,7 @@ public class MutableSharedBitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.MutableIntSet#remove(int) */ + @Override public boolean remove(int i) { if (privatePart != null) { if (privatePart.contains(i)) { @@ -838,6 +853,7 @@ public class MutableSharedBitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.MutableIntSet#intersectWith(com.ibm.wala.util.intset.IntSet) */ + @Override public void intersectWith(IntSet set) { if (set instanceof MutableSharedBitVectorIntSet) { intersectWithInternal((MutableSharedBitVectorIntSet) set); @@ -978,6 +994,7 @@ public class MutableSharedBitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#containsAny(com.ibm.wala.util.intset.IntSet) */ + @Override public boolean containsAny(IntSet set) { if (set instanceof MutableSharedBitVectorIntSet) { MutableSharedBitVectorIntSet other = (MutableSharedBitVectorIntSet) set; @@ -1009,6 +1026,7 @@ public class MutableSharedBitVectorIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.MutableIntSet#addAllExcluding(com.ibm.wala.util.intset.IntSet, com.ibm.wala.util.intset.IntSet) */ + @Override public boolean addAllInIntersection(IntSet other, IntSet filter) { if (other instanceof MutableSharedBitVectorIntSet) { return addAllInIntersectionInternal((MutableSharedBitVectorIntSet) other, filter); @@ -1089,6 +1107,7 @@ public class MutableSharedBitVectorIntSet implements MutableIntSet { } } + @Override public void clear() { privatePart = null; sharedPart = null; diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSharedBitVectorIntSetFactory.java b/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSharedBitVectorIntSetFactory.java index 5b3391395..e51bb6235 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSharedBitVectorIntSetFactory.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSharedBitVectorIntSetFactory.java @@ -21,6 +21,7 @@ public class MutableSharedBitVectorIntSetFactory implements MutableIntSetFactory /* * @see com.ibm.wala.util.intset.MutableIntSetFactory#make(int[]) */ + @Override public MutableSharedBitVectorIntSet make(int[] set) { SparseIntSet s = (SparseIntSet) sparseFactory.make(set); return new MutableSharedBitVectorIntSet(s); @@ -29,6 +30,7 @@ public class MutableSharedBitVectorIntSetFactory implements MutableIntSetFactory /* * @see com.ibm.wala.util.intset.MutableIntSetFactory#parse(java.lang.String) */ + @Override public MutableSharedBitVectorIntSet parse(String string) throws NumberFormatException { SparseIntSet s = (SparseIntSet) sparseFactory.parse(string); return new MutableSharedBitVectorIntSet(s); @@ -37,6 +39,7 @@ public class MutableSharedBitVectorIntSetFactory implements MutableIntSetFactory /* * @see com.ibm.wala.util.intset.MutableIntSetFactory#makeCopy(com.ibm.wala.util.intset.IntSet) */ + @Override public MutableSharedBitVectorIntSet makeCopy(IntSet x) throws IllegalArgumentException { if (x == null) { throw new IllegalArgumentException("x == null"); @@ -62,6 +65,7 @@ public class MutableSharedBitVectorIntSetFactory implements MutableIntSetFactory /* * @see com.ibm.wala.util.intset.MutableIntSetFactory#make() */ + @Override public MutableSharedBitVectorIntSet make() { return new MutableSharedBitVectorIntSet(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSparseIntSet.java b/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSparseIntSet.java index ae06469da..22232cada 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSparseIntSet.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSparseIntSet.java @@ -69,13 +69,15 @@ public class MutableSparseIntSet extends SparseIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.MutableIntSet#clear() */ - public void clear() { + @Override + public void clear() { size = 0; } /** */ - public boolean remove(int value) { + @Override + public boolean remove(int value) { if (elements != null) { int remove; for (remove = 0; remove < size; remove++) { @@ -117,7 +119,8 @@ public class MutableSparseIntSet extends SparseIntSet implements MutableIntSet { * @param value * @return true iff this value changes */ - @SuppressWarnings("unused") + @Override + @SuppressWarnings("unused") public boolean add(int value) { if (elements == null) { elements = new int[getInitialNonEmptySize()]; @@ -176,7 +179,8 @@ public class MutableSparseIntSet extends SparseIntSet implements MutableIntSet { * @throws IllegalArgumentException * if that == null */ - @SuppressWarnings("unused") + @Override + @SuppressWarnings("unused") public void copySet(IntSet that) throws IllegalArgumentException { if (that == null) { throw new IllegalArgumentException("that == null"); @@ -201,7 +205,8 @@ public class MutableSparseIntSet extends SparseIntSet implements MutableIntSet { that.foreach(new IntSetAction() { private int index = 0; - public void act(int i) { + @Override + public void act(int i) { elements[index++] = i; } }); @@ -211,7 +216,8 @@ public class MutableSparseIntSet extends SparseIntSet implements MutableIntSet { } } - public void intersectWith(IntSet set) { + @Override + public void intersectWith(IntSet set) { if (set == null) { throw new IllegalArgumentException("null set"); } @@ -307,7 +313,8 @@ public class MutableSparseIntSet extends SparseIntSet implements MutableIntSet { * @throws IllegalArgumentException * if set == null */ - @SuppressWarnings("unused") + @Override + @SuppressWarnings("unused") public boolean addAll(IntSet set) throws IllegalArgumentException { if (set == null) { throw new IllegalArgumentException("set == null"); @@ -317,7 +324,8 @@ public class MutableSparseIntSet extends SparseIntSet implements MutableIntSet { } else { int oldSize = size; set.foreach(new IntSetAction() { - public void act(int i) { + @Override + public void act(int i) { if (!contains(i)) add(i); } @@ -474,7 +482,8 @@ public class MutableSparseIntSet extends SparseIntSet implements MutableIntSet { * com.ibm.wala.util.intset.MutableIntSet#addAllInIntersection(com.ibm.wala * .util.intset.IntSet, com.ibm.wala.util.intset.IntSet) */ - public boolean addAllInIntersection(IntSet other, IntSet filter) { + @Override + public boolean addAllInIntersection(IntSet other, IntSet filter) { if (other == null) { throw new IllegalArgumentException("other is null"); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSparseIntSetFactory.java b/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSparseIntSetFactory.java index 2d976d963..dfcbb3bca 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSparseIntSetFactory.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSparseIntSetFactory.java @@ -21,6 +21,7 @@ public class MutableSparseIntSetFactory implements MutableIntSetFactory implements OrdinalSetMapping { this.offset = offset; } + @Override public int getMaximumIndex() { return offset + delegate.getMaximumIndex(); } + @Override public int getSize() { return delegate.getSize(); } @@ -47,10 +49,12 @@ public class OffsetOrdinalSetMapping implements OrdinalSetMapping { return new OffsetOrdinalSetMapping(m, offset); } + @Override public int add(T o) { return offset + delegate.add(o); } + @Override public int getMappedIndex(T o) { if (delegate.getMappedIndex(o) == -1) { return -1; @@ -58,14 +62,17 @@ public class OffsetOrdinalSetMapping implements OrdinalSetMapping { return offset + delegate.getMappedIndex(o); } + @Override public T getMappedObject(int n) throws NoSuchElementException { return delegate.getMappedObject(n - offset); } + @Override public boolean hasMappedIndex(T o) { return delegate.hasMappedIndex(o); } + @Override public Iterator iterator() { return delegate.iterator(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/intset/OrdinalSet.java b/com.ibm.wala.util/src/com/ibm/wala/util/intset/OrdinalSet.java index 34188c78f..af6d63451 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/intset/OrdinalSet.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/intset/OrdinalSet.java @@ -58,6 +58,7 @@ public class OrdinalSet implements Iterable { return (S == null) ? 0 : S.size(); } + @Override public Iterator iterator() { if (S == null) { return EmptyIterator.instance(); @@ -66,14 +67,17 @@ public class OrdinalSet implements Iterable { return new Iterator() { IntIterator it = S.intIterator(); + @Override public boolean hasNext() { return it.hasNext(); } + @Override public T next() { return mapping.getMappedObject(it.next()); } + @Override public void remove() { Assertions.UNREACHABLE(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/intset/SemiSparseMutableIntSet.java b/com.ibm.wala.util/src/com/ibm/wala/util/intset/SemiSparseMutableIntSet.java index 9563e942a..4b6968399 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/intset/SemiSparseMutableIntSet.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/intset/SemiSparseMutableIntSet.java @@ -227,6 +227,7 @@ public class SemiSparseMutableIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.MutableIntSet#clear() */ + @Override public void clear() { sparsePart.clear(); densePart = null; @@ -236,6 +237,7 @@ public class SemiSparseMutableIntSet implements MutableIntSet { * @param i * @return true iff this set contains integer i */ + @Override public boolean contains(int i) { if (densePart != null && inDenseRange(i)) { return densePart.contains(i); @@ -247,6 +249,7 @@ public class SemiSparseMutableIntSet implements MutableIntSet { /** * @return true iff this set contains integer i */ + @Override public boolean containsAny(IntSet set) { if (set == null) { throw new IllegalArgumentException("null set"); @@ -273,6 +276,7 @@ public class SemiSparseMutableIntSet implements MutableIntSet { * * @return a new IntSet which is the intersection of this and that */ + @Override public IntSet intersection(IntSet that) { if (that == null) { throw new IllegalArgumentException("null that"); @@ -290,6 +294,7 @@ public class SemiSparseMutableIntSet implements MutableIntSet { /* * @see com.ibm.wala.util.intset.IntSet#union(com.ibm.wala.util.intset.IntSet) */ + @Override public IntSet union(IntSet that) { SemiSparseMutableIntSet temp = new SemiSparseMutableIntSet(); temp.addAll(this); @@ -301,6 +306,7 @@ public class SemiSparseMutableIntSet implements MutableIntSet { /** * @return true iff this set is empty */ + @Override public boolean isEmpty() { return sparsePart.isEmpty() && (densePart == null || densePart.isZero()); } @@ -308,6 +314,7 @@ public class SemiSparseMutableIntSet implements MutableIntSet { /** * @return the number of elements in this set */ + @Override public int size() { return sparsePart.size() + (densePart == null ? 0 : densePart.populationCount()); } @@ -315,14 +322,17 @@ public class SemiSparseMutableIntSet implements MutableIntSet { /** * @return a perhaps more efficient iterator */ + @Override public IntIterator intIterator() { class DensePartIterator implements IntIterator { private int i = -1; + @Override public boolean hasNext() { return densePart.nextSetBit(i + 1) != -1; } + @Override public int next() { int next = densePart.nextSetBit(i + 1); i = next; @@ -349,6 +359,7 @@ public class SemiSparseMutableIntSet implements MutableIntSet { /** * Invoke an action on each element of the Set */ + @Override public void foreach(IntSetAction action) { if (action == null) { throw new IllegalArgumentException("null action"); @@ -366,6 +377,7 @@ public class SemiSparseMutableIntSet implements MutableIntSet { * * @param action */ + @Override public void foreachExcluding(IntSet X, IntSetAction action) { sparsePart.foreachExcluding(X, action); if (densePart != null) { @@ -380,6 +392,7 @@ public class SemiSparseMutableIntSet implements MutableIntSet { /** * @return maximum integer in this set. */ + @Override public int max() throws IllegalStateException { if (densePart == null) { return sparsePart.max(); @@ -392,6 +405,7 @@ public class SemiSparseMutableIntSet implements MutableIntSet { * @return true iff this has the same value as that. * @throws IllegalArgumentException if that is null */ + @Override public boolean sameValue(IntSet that) { if (that == null) { throw new IllegalArgumentException("that is null"); @@ -418,6 +432,7 @@ public class SemiSparseMutableIntSet implements MutableIntSet { * @return true iff this is a subset of that. * @throws IllegalArgumentException if that is null */ + @Override public boolean isSubset(IntSet that) { if (that == null) { throw new IllegalArgumentException("that is null"); @@ -448,6 +463,7 @@ public class SemiSparseMutableIntSet implements MutableIntSet { * * @throws IllegalArgumentException if set == null */ + @Override public void copySet(IntSet set) throws IllegalArgumentException { if (set == null) { throw new IllegalArgumentException("set == null"); @@ -479,6 +495,7 @@ public class SemiSparseMutableIntSet implements MutableIntSet { * @return true iff the value of this changes. * @throws IllegalArgumentException if set == null */ + @Override public boolean addAll(IntSet set) throws IllegalArgumentException { if (set == null) { throw new IllegalArgumentException("set == null"); @@ -556,6 +573,7 @@ public class SemiSparseMutableIntSet implements MutableIntSet { * @param i integer to add * @return true iff the value of this changes. */ + @Override public boolean add(int i) { if (densePart != null && inDenseRange(i)) { if (!densePart.get(i)) { @@ -579,6 +597,7 @@ public class SemiSparseMutableIntSet implements MutableIntSet { * @param i integer to remove * @return true iff the value of this changes. */ + @Override public boolean remove(int i) { if (densePart != null && densePart.get(i)) { densePart.clear(i); @@ -599,6 +618,7 @@ public class SemiSparseMutableIntSet implements MutableIntSet { * * @param set */ + @Override public void intersectWith(IntSet set) { sparsePart.intersectWith(set); if (densePart != null) { @@ -613,6 +633,7 @@ public class SemiSparseMutableIntSet implements MutableIntSet { /** * @throws IllegalArgumentException if other is null */ + @Override public boolean addAllInIntersection(IntSet other, IntSet filter) { if (other == null) { throw new IllegalArgumentException("other is null"); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/intset/SemiSparseMutableIntSetFactory.java b/com.ibm.wala.util/src/com/ibm/wala/util/intset/SemiSparseMutableIntSetFactory.java index 945ed3eee..cd3df1b8d 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/intset/SemiSparseMutableIntSetFactory.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/intset/SemiSparseMutableIntSetFactory.java @@ -21,6 +21,7 @@ public class SemiSparseMutableIntSetFactory implements MutableIntSetFactory= data.size()) { @@ -69,6 +70,7 @@ public class TwoLevelIntVector implements IntVector { * * @see com.ibm.wala.util.intset.IntVector#set(int, int) */ + @Override public void set(int x, int value) { maxIndex = Math.max(maxIndex, x); int page = getPageNumber(x); @@ -101,6 +103,7 @@ public class TwoLevelIntVector implements IntVector { System.err.println(("data: size = " + data.size())); } + @Override public int getMaxIndex() { return maxIndex; } diff --git a/com.ibm.wala.util/src/com/ibm/wala/viz/NodeDecorator.java b/com.ibm.wala.util/src/com/ibm/wala/viz/NodeDecorator.java index 890f56ab6..85fbe9574 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/viz/NodeDecorator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/viz/NodeDecorator.java @@ -17,6 +17,7 @@ import com.ibm.wala.util.WalaException; public interface NodeDecorator { public static final NodeDecorator DEFAULT = new NodeDecorator() { + @Override public String getLabel(Object o) { return o.toString(); } };