├── .gitattributes ├── .github └── workflows │ ├── build.yml │ ├── codeql.yml │ └── release.yml ├── .gitignore ├── .gitmodules ├── LICENSE ├── README.md ├── build.gradle.kts ├── core ├── build.gradle.kts └── src │ └── main │ ├── kotlin │ └── spp │ │ └── jetbrains │ │ ├── PluginBundle.kt │ │ ├── PluginUI.kt │ │ ├── ScopeExtensions.kt │ │ ├── SourceKey.kt │ │ ├── UserData.kt │ │ ├── artifact │ │ ├── model │ │ │ ├── ArtifactBinaryExpression.kt │ │ │ ├── ArtifactElement.kt │ │ │ ├── ArtifactLiteralValue.kt │ │ │ ├── BlockArtifact.kt │ │ │ ├── CallArtifact.kt │ │ │ ├── ControlStructureArtifact.kt │ │ │ ├── CountingLoopArtifact.kt │ │ │ ├── ForLoopArtifact.kt │ │ │ ├── FunctionArtifact.kt │ │ │ ├── IfArtifact.kt │ │ │ ├── LoopArtifact.kt │ │ │ └── ReferenceArtifact.kt │ │ └── service │ │ │ ├── ArtifactModelService.kt │ │ │ ├── ArtifactScopeService.kt │ │ │ ├── ArtifactTypeService.kt │ │ │ └── define │ │ │ ├── AbstractSourceMarkerService.kt │ │ │ ├── IArtifactModelService.kt │ │ │ ├── IArtifactScopeService.kt │ │ │ ├── IArtifactTypeService.kt │ │ │ └── ISourceMarkerService.kt │ │ ├── command │ │ └── util │ │ │ └── CircularList.kt │ │ ├── icons │ │ └── PluginIcons.kt │ │ ├── instrument │ │ ├── column │ │ │ ├── InstrumentOverviewColumnInfo.kt │ │ │ └── LiveInstrumentEventColumnInfo.kt │ │ ├── log │ │ │ └── VariableParser.kt │ │ ├── model │ │ │ └── InstrumentOverview.kt │ │ ├── presentation │ │ │ ├── ErrorVariableSimpleNode.kt │ │ │ └── LiveVariableNode.kt │ │ └── renderer │ │ │ ├── CreatedByTableCellRenderer.kt │ │ │ ├── InstrumentOverviewStatusTableCellRenderer.kt │ │ │ └── InstrumentTypeTableCellRenderer.kt │ │ ├── state │ │ └── LiveStateBar.kt │ │ ├── status │ │ ├── SourceStatus.kt │ │ ├── SourceStatusListener.kt │ │ └── SourceStatusService.kt │ │ ├── ui │ │ └── StickyNotificationPanel.kt │ │ ├── utils │ │ └── ViewUtils.kt │ │ └── view │ │ ├── ResumableView.kt │ │ ├── ResumableViewCollection.kt │ │ ├── ResumableViewManager.kt │ │ ├── column │ │ └── ServiceEndpointColumnInfo.kt │ │ ├── manager │ │ ├── LiveViewChartManager.kt │ │ ├── LiveViewLogManager.kt │ │ └── LiveViewTraceManager.kt │ │ ├── model │ │ ├── ServiceEndpointRow.kt │ │ └── TimeInterval.kt │ │ ├── overlay │ │ └── ValueDotPainter.kt │ │ ├── trace │ │ ├── column │ │ │ ├── PairColumnInfo.kt │ │ │ └── TraceSpanTreeNodeColumnInfo.kt │ │ ├── node │ │ │ ├── TraceRootTreeNode.kt │ │ │ └── TraceSpanTreeNode.kt │ │ └── renderer │ │ │ ├── TraceDurationTableCellRenderer.kt │ │ │ └── TraceErrorTableCellRenderer.kt │ │ └── window │ │ ├── LiveLogWindow.kt │ │ ├── LiveTraceWindow.kt │ │ ├── renderer │ │ └── EndpointAvailabilityTableCellRenderer.kt │ │ └── util │ │ ├── EndpointRowView.kt │ │ └── TabbedResumableView.kt │ └── resources │ └── messages │ ├── PluginBundle.properties │ └── PluginBundle_zh.properties ├── detekt.yml ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── insight ├── build.gradle.kts └── src │ ├── main │ └── kotlin │ │ └── spp │ │ └── jetbrains │ │ └── insight │ │ ├── InsightExtensions.kt │ │ ├── InsightKeys.kt │ │ ├── InsightPassConfig.kt │ │ ├── InsightPassProvider.kt │ │ ├── LiveInsightManager.kt │ │ ├── ProceduralAnalyzer.kt │ │ ├── contributor │ │ └── FunctionDurationContributor.kt │ │ ├── pass │ │ ├── ArtifactPass.kt │ │ ├── InsightPass.kt │ │ ├── ProceduralMultiPathPass.kt │ │ ├── ProceduralPathPass.kt │ │ ├── artifact │ │ │ ├── CallDurationPass.kt │ │ │ ├── LoadPsiPass.kt │ │ │ ├── RandomConditionalPass.kt │ │ │ ├── RecursiveCallPass.kt │ │ │ └── ThreadSleepPass.kt │ │ ├── multipath │ │ │ ├── SavePsiMultiPathPass.kt │ │ │ ├── SimplifyMultiPathPass.kt │ │ │ └── StaticDfaMultiPathPass.kt │ │ └── path │ │ │ ├── PathDurationPass.kt │ │ │ ├── PathProbabilityPass.kt │ │ │ ├── PruneArtifactsPass.kt │ │ │ └── RecursivePathPass.kt │ │ └── path │ │ ├── ProceduralMultiPath.kt │ │ └── ProceduralPath.kt │ └── test │ ├── kotlin │ └── spp │ │ └── jetbrains │ │ └── insight │ │ ├── BranchProbabilityTest.kt │ │ ├── FunctionDurationTest.kt │ │ ├── InnerBranchProbabilityTest.kt │ │ ├── LiteralBranchProbabilityTest.kt │ │ ├── MultiInsightTest.kt │ │ └── pass │ │ ├── artifact │ │ ├── CountingLoopPassTest.kt │ │ ├── RandomConditionalPassTest.kt │ │ └── ThreadSleepPassTest.kt │ │ ├── multipath │ │ ├── SimplifyBranchTest.kt │ │ └── StaticDfaTest.kt │ │ └── path │ │ ├── DeadCodeDurationTest.kt │ │ ├── PassVariableTest.kt │ │ ├── ReanalyzeDurationTest.kt │ │ ├── RecursionTest.kt │ │ └── UnbalancedBranchProbabilityTest.kt │ └── testData │ ├── java │ ├── BranchProbability.java │ ├── CountingLoop.java │ ├── DeadCodeDuration.java │ ├── InnerBranchProbability.java │ ├── LiteralBranchProbability.java │ ├── MultiInsight.java │ ├── PassVariable.java │ ├── RandomConditional.java │ ├── ReanalyzeDuration.java │ ├── Recursion.java │ ├── SequentialMethodCalls.java │ ├── SimplifyBranch.java │ ├── StaticDfa.java │ ├── ThreadSleep.java │ └── UnbalancedBranchProbability.java │ ├── javascript │ ├── BranchProbability.js │ ├── DeadCodeDuration.js │ ├── InnerBranchProbability.js │ ├── LiteralBranchProbability.js │ ├── MultiInsight.js │ ├── PassVariable.js │ ├── RandomConditional.js │ ├── ReanalyzeDuration.js │ ├── Recursion.js │ ├── SequentialMethodCalls.js │ ├── SimplifyBranch.js │ └── UnbalancedBranchProbability.js │ ├── kotlin │ ├── BranchProbability.kt │ ├── DeadCodeDuration.kt │ ├── InnerBranchProbability.kt │ ├── LiteralBranchProbability.kt │ ├── MultiInsight.kt │ ├── PassVariable.kt │ ├── RandomConditional.kt │ ├── ReanalyzeDuration.kt │ ├── Recursion.kt │ ├── SequentialMethodCalls.kt │ ├── SimplifyBranch.kt │ ├── StaticDfa.kt │ ├── ThreadSleep.kt │ └── UnbalancedBranchProbability.kt │ └── python │ ├── BranchProbability.py │ ├── DeadCodeDuration.py │ ├── InnerBranchProbability.py │ ├── LiteralBranchProbability.py │ ├── MultiInsight.py │ ├── PassVariable.py │ ├── RandomConditional.py │ ├── ReanalyzeDuration.py │ ├── Recursion.py │ ├── SequentialMethodCalls.py │ ├── SimplifyBranch.py │ └── UnbalancedBranchProbability.py ├── marker ├── build.gradle.kts ├── js-marker │ ├── build.gradle.kts │ └── src │ │ ├── main │ │ ├── kotlin │ │ │ └── spp │ │ │ │ └── jetbrains │ │ │ │ └── marker │ │ │ │ └── js │ │ │ │ ├── JavascriptGuideProvider.kt │ │ │ │ ├── JavascriptLanguageProvider.kt │ │ │ │ ├── detect │ │ │ │ ├── JavascriptEndpointDetector.kt │ │ │ │ ├── JavascriptLoggerDetector.kt │ │ │ │ └── endpoint │ │ │ │ │ └── ExpressEndpoint.kt │ │ │ │ ├── model │ │ │ │ ├── JavascriptBinaryExpression.kt │ │ │ │ ├── JavascriptBlockArtifact.kt │ │ │ │ ├── JavascriptCallArtifact.kt │ │ │ │ ├── JavascriptFunctionArtifact.kt │ │ │ │ ├── JavascriptIfArtifact.kt │ │ │ │ ├── JavascriptLiteralValue.kt │ │ │ │ └── JavascriptReferenceArtifact.kt │ │ │ │ ├── presentation │ │ │ │ ├── JavascriptVariableNode.kt │ │ │ │ └── JavascriptVariableRootNode.kt │ │ │ │ └── service │ │ │ │ ├── JavascriptArtifactConditionService.kt │ │ │ │ ├── JavascriptArtifactCreationService.kt │ │ │ │ ├── JavascriptArtifactMarkService.kt │ │ │ │ ├── JavascriptArtifactModelService.kt │ │ │ │ ├── JavascriptArtifactNamingService.kt │ │ │ │ ├── JavascriptArtifactScopeService.kt │ │ │ │ └── JavascriptArtifactTypeService.kt │ │ └── resources │ │ │ └── META-INF │ │ │ └── services │ │ │ └── spp.jetbrains.marker.LanguageProvider │ │ └── test │ │ ├── kotlin │ │ └── spp │ │ │ └── jetbrains │ │ │ └── marker │ │ │ └── js │ │ │ ├── detect │ │ │ └── endpoint │ │ │ │ └── ExpressEndpointTest.kt │ │ │ └── service │ │ │ └── JavascriptArtifactScopeServiceTest.kt │ │ └── testData │ │ ├── endpoint │ │ └── express │ │ │ ├── ExpressAllRouter.js │ │ │ ├── ExpressDirectRouter.js │ │ │ ├── ExpressMultipleRouter.js │ │ │ ├── ExpressVariableRouter.js │ │ │ ├── all-endpoint.js │ │ │ └── test-endpoint.js │ │ └── scope │ │ ├── CalledFunctions.js │ │ └── CallerFunctions.js ├── jvm-marker │ ├── build.gradle.kts │ └── src │ │ ├── main │ │ ├── kotlin │ │ │ └── spp │ │ │ │ └── jetbrains │ │ │ │ └── marker │ │ │ │ └── jvm │ │ │ │ ├── JVMGuideProvider.kt │ │ │ │ ├── JVMLanguageProvider.kt │ │ │ │ ├── detect │ │ │ │ ├── JVMEndpointDetector.kt │ │ │ │ ├── JVMLoggerDetector.kt │ │ │ │ └── endpoint │ │ │ │ │ ├── MicronautEndpoint.kt │ │ │ │ │ ├── SkywalkingTraceEndpoint.kt │ │ │ │ │ ├── SpringMVCEndpoint.kt │ │ │ │ │ └── VertxEndpoint.kt │ │ │ │ ├── model │ │ │ │ ├── JVMBinaryExpression.kt │ │ │ │ ├── JVMBlockArtifact.kt │ │ │ │ ├── JVMCallArtifact.kt │ │ │ │ ├── JVMCountingLoop.kt │ │ │ │ ├── JVMFunctionArtifact.kt │ │ │ │ ├── JVMIfArtifact.kt │ │ │ │ ├── JVMLiteralValue.kt │ │ │ │ └── JVMReferenceArtifact.kt │ │ │ │ ├── presentation │ │ │ │ └── JVMVariableNode.kt │ │ │ │ └── service │ │ │ │ ├── JVMArtifactConditionService.kt │ │ │ │ ├── JVMArtifactCreationService.kt │ │ │ │ ├── JVMArtifactMarkService.kt │ │ │ │ ├── JVMArtifactModelService.kt │ │ │ │ ├── JVMArtifactNamingService.kt │ │ │ │ ├── JVMArtifactScopeService.kt │ │ │ │ ├── JVMArtifactTypeService.kt │ │ │ │ └── utils │ │ │ │ └── JVMMarkerUtils.kt │ │ └── resources │ │ │ └── META-INF │ │ │ └── services │ │ │ └── spp.jetbrains.marker.LanguageProvider │ │ └── test │ │ ├── kotlin │ │ └── spp │ │ │ └── jetbrains │ │ │ └── marker │ │ │ └── jvm │ │ │ ├── JVMArtifactNamingServiceTest.kt │ │ │ ├── JVMConditionParserTest.kt │ │ │ ├── JVMGuideProviderTest.kt │ │ │ ├── detect │ │ │ ├── JVMLoggerDetectorTest.kt │ │ │ └── endpoint │ │ │ │ ├── AbstractEndpointDetectorTest.kt │ │ │ │ ├── GroovyEndpointDetectorTest.kt │ │ │ │ ├── JavaEndpointDetectorTest.kt │ │ │ │ ├── KotlinEndpointDetectorTest.kt │ │ │ │ └── ScalaEndpointNameDetectorTest.kt │ │ │ └── service │ │ │ ├── JVMArtifactScopeServiceTest.kt │ │ │ ├── JVMFieldTest.kt │ │ │ └── JVMVariableScopeTest.kt │ │ └── testData │ │ ├── field │ │ ├── field-and-function │ │ │ ├── FieldAndFunction.groovy │ │ │ ├── FieldAndFunction.java │ │ │ └── FieldAndFunction.kt │ │ └── single-field │ │ │ ├── SingleField.groovy │ │ │ ├── SingleField.java │ │ │ └── SingleField.kt │ │ ├── jvmGuide │ │ ├── GroovyMethod.groovy │ │ ├── JavaMethod.java │ │ └── KotlinMethod.kt │ │ ├── naming │ │ ├── class-name │ │ │ ├── ClassName.groovy │ │ │ ├── ClassName.java │ │ │ └── ClassName.kt │ │ ├── class-variable │ │ │ ├── ClassVariable.groovy │ │ │ ├── ClassVariable.java │ │ │ └── ClassVariable.kt │ │ ├── expect-open-class-name │ │ │ └── ExpectOpenClassName.kt │ │ ├── inner-class-method-name │ │ │ ├── InnerClassMethodName.groovy │ │ │ ├── InnerClassMethodName.java │ │ │ └── InnerClassMethodName.kt │ │ ├── inner-class-method-variable │ │ │ ├── InnerClassMethodVariable.groovy │ │ │ ├── InnerClassMethodVariable.java │ │ │ └── InnerClassMethodVariable.kt │ │ ├── inner-class-name │ │ │ ├── InnerClassName.groovy │ │ │ ├── InnerClassName.java │ │ │ └── InnerClassName.kt │ │ ├── inner-class-variable │ │ │ ├── InnerClassVariable.groovy │ │ │ ├── InnerClassVariable.java │ │ │ └── InnerClassVariable.kt │ │ ├── method-name │ │ │ ├── MethodName.groovy │ │ │ ├── MethodName.java │ │ │ └── MethodName.kt │ │ ├── method-variable │ │ │ ├── MethodVariable.groovy │ │ │ ├── MethodVariable.java │ │ │ └── MethodVariable.kt │ │ ├── package-class-name │ │ │ ├── PackageClassName.groovy │ │ │ ├── PackageClassName.java │ │ │ └── PackageClassName.kt │ │ ├── package-inner-class-name │ │ │ ├── PackageInnerClassName.groovy │ │ │ ├── PackageInnerClassName.java │ │ │ └── PackageInnerClassName.kt │ │ └── package-method-name │ │ │ ├── PackageMethodName.groovy │ │ │ ├── PackageMethodName.java │ │ │ └── PackageMethodName.kt │ │ └── scope │ │ ├── CalledFunctions.groovy │ │ ├── CalledFunctions.java │ │ ├── CalledFunctions.kt │ │ ├── CallerFunctions.groovy │ │ ├── CallerFunctions.java │ │ ├── CallerFunctions.kt │ │ ├── GetFunctionsOnInnerClass.groovy │ │ ├── GetFunctionsOnInnerClass.java │ │ ├── GetFunctionsOnInnerClass.kt │ │ ├── VariableScope.groovy │ │ ├── VariableScope.java │ │ └── VariableScope.kt ├── py-marker │ ├── build.gradle.kts │ └── src │ │ ├── main │ │ ├── kotlin │ │ │ └── spp │ │ │ │ └── jetbrains │ │ │ │ └── marker │ │ │ │ └── py │ │ │ │ ├── PythonGuideProvider.kt │ │ │ │ ├── PythonLanguageProvider.kt │ │ │ │ ├── detect │ │ │ │ ├── PythonEndpointDetector.kt │ │ │ │ ├── PythonLoggerDetector.kt │ │ │ │ └── endpoint │ │ │ │ │ └── FlaskEndpoint.kt │ │ │ │ ├── model │ │ │ │ ├── PythonBinaryExpression.kt │ │ │ │ ├── PythonBlockArtifact.kt │ │ │ │ ├── PythonCallArtifact.kt │ │ │ │ ├── PythonFunctionArtifact.kt │ │ │ │ ├── PythonIfArtifact.kt │ │ │ │ ├── PythonLiteralValue.kt │ │ │ │ └── PythonReferenceArtifact.kt │ │ │ │ ├── presentation │ │ │ │ ├── PythonVariableNode.kt │ │ │ │ └── PythonVariableRootNode.kt │ │ │ │ └── service │ │ │ │ ├── PythonArtifactConditionService.kt │ │ │ │ ├── PythonArtifactCreationService.kt │ │ │ │ ├── PythonArtifactMarkService.kt │ │ │ │ ├── PythonArtifactModelService.kt │ │ │ │ ├── PythonArtifactNamingService.kt │ │ │ │ ├── PythonArtifactScopeService.kt │ │ │ │ └── PythonArtifactTypeService.kt │ │ └── resources │ │ │ └── META-INF │ │ │ └── services │ │ │ └── spp.jetbrains.marker.LanguageProvider │ │ └── test │ │ ├── kotlin │ │ └── spp │ │ │ └── jetbrains │ │ │ └── marker │ │ │ └── py │ │ │ ├── PythonGuideProviderTest.kt │ │ │ ├── presentation │ │ │ └── LiveVariableParseTest.kt │ │ │ └── service │ │ │ └── PythonArtifactScopeServiceTest.kt │ │ ├── resources │ │ └── breakpointHit │ │ │ └── dictParse.json │ │ └── testData │ │ ├── pythonGuide │ │ └── PythonMethod.py │ │ └── scope │ │ ├── CalledFunctions.py │ │ └── CallerFunctions.py ├── rs-marker │ ├── build.gradle.kts │ └── src │ │ └── main │ │ ├── kotlin │ │ └── spp │ │ │ └── jetbrains │ │ │ └── marker │ │ │ └── rs │ │ │ ├── RustLanguageProvider.kt │ │ │ ├── model │ │ │ └── RustIfArtifact.kt │ │ │ └── service │ │ │ ├── RustArtifactModelService.kt │ │ │ └── RustArtifactTypeService.kt │ │ └── resources │ │ └── META-INF │ │ └── services │ │ └── spp.jetbrains.marker.LanguageProvider ├── src │ └── main │ │ └── kotlin │ │ └── spp │ │ └── jetbrains │ │ └── marker │ │ ├── LanguageProvider.kt │ │ ├── SourceMarker.kt │ │ ├── SourceMarkerConfiguration.kt │ │ ├── SourceMarkerKeys.kt │ │ ├── SourceMarkerUtils.kt │ │ ├── UltimateProvider.kt │ │ ├── command │ │ ├── LiveCommand.kt │ │ ├── LiveCommandContext.kt │ │ └── LiveLocationContext.kt │ │ ├── indicator │ │ └── LiveIndicator.kt │ │ ├── plugin │ │ ├── FileActivityListener.kt │ │ ├── LivePluginService.kt │ │ ├── LiveStatusBarManager.kt │ │ ├── SourceInlayComponentProvider.kt │ │ ├── SourceInlayHintProvider.kt │ │ ├── SourceLineMarkerProvider.kt │ │ ├── SourceMarkerStartupActivity.kt │ │ ├── action │ │ │ └── SourceMarkerVisibilityAction.kt │ │ └── impl │ │ │ └── LivePluginServiceImpl.kt │ │ ├── service │ │ ├── ArtifactConditionService.kt │ │ ├── ArtifactCreationService.kt │ │ ├── ArtifactMarkService.kt │ │ ├── ArtifactNamingService.kt │ │ ├── ArtifactVersionService.kt │ │ ├── SourceGuideProvider.kt │ │ └── define │ │ │ ├── AbstractSourceGuideProvider.kt │ │ │ ├── IArtifactConditionService.kt │ │ │ ├── IArtifactCreationService.kt │ │ │ ├── IArtifactMarkService.kt │ │ │ └── IArtifactNamingService.kt │ │ └── source │ │ ├── SourceFileMarker.kt │ │ ├── SourceFileMarkerProvider.kt │ │ ├── info │ │ ├── EndpointDetector.kt │ │ └── LoggerDetector.kt │ │ └── mark │ │ ├── api │ │ ├── ClassSourceMark.kt │ │ ├── ExpressionSourceMark.kt │ │ ├── MethodSourceMark.kt │ │ ├── SourceMark.kt │ │ ├── SourceMarkProvider.kt │ │ ├── component │ │ │ ├── api │ │ │ │ ├── SourceMarkComponent.kt │ │ │ │ ├── SourceMarkComponentProvider.kt │ │ │ │ └── config │ │ │ │ │ └── SourceMarkComponentConfiguration.kt │ │ │ ├── jcef │ │ │ │ ├── SourceMarkJcefComponent.kt │ │ │ │ ├── SourceMarkJcefComponentProvider.kt │ │ │ │ ├── SourceMarkSingleJcefComponentProvider.kt │ │ │ │ └── config │ │ │ │ │ └── SourceMarkJcefComponentConfiguration.kt │ │ │ ├── swing │ │ │ │ └── SwingSourceMarkComponentProvider.kt │ │ │ └── tooltip │ │ │ │ ├── LiveTooltip.kt │ │ │ │ └── TextLiveTooltip.kt │ │ ├── config │ │ │ └── SourceMarkConfiguration.kt │ │ └── event │ │ │ ├── IEventCode.kt │ │ │ ├── SourceMarkEvent.kt │ │ │ ├── SourceMarkEventCode.kt │ │ │ ├── SourceMarkEventListener.kt │ │ │ └── SynchronousSourceMarkEventListener.kt │ │ ├── guide │ │ ├── ClassGuideMark.kt │ │ ├── ExpressionGuideMark.kt │ │ ├── GuideMark.kt │ │ ├── MethodGuideMark.kt │ │ └── config │ │ │ └── GuideMarkConfiguration.kt │ │ ├── gutter │ │ ├── ClassGutterMark.kt │ │ ├── ExpressionGutterMark.kt │ │ ├── GutterMark.kt │ │ ├── MethodGutterMark.kt │ │ ├── config │ │ │ └── GutterMarkConfiguration.kt │ │ └── event │ │ │ └── GutterMarkEventCode.kt │ │ └── inlay │ │ ├── ExpressionInlayMark.kt │ │ ├── InlayMark.kt │ │ ├── MethodInlayMark.kt │ │ ├── config │ │ ├── InlayMarkConfiguration.kt │ │ └── InlayMarkVirtualText.kt │ │ └── event │ │ └── InlayMarkEventCode.kt └── ult-marker │ ├── build.gradle.kts │ └── src │ └── main │ ├── kotlin │ └── spp │ │ └── jetbrains │ │ └── marker │ │ └── ult │ │ ├── UltimateMarkerProvider.kt │ │ └── endpoint │ │ └── UrlResolverEndpointDetector.kt │ └── resources │ └── META-INF │ └── services │ └── spp.jetbrains.marker.UltimateProvider ├── plugin ├── build.gradle.kts └── src │ ├── main │ ├── kotlin │ │ └── spp │ │ │ └── jetbrains │ │ │ └── sourcemarker │ │ │ ├── SourceMarkerPlugin.kt │ │ │ ├── action │ │ │ ├── DisableSourceAction.kt │ │ │ └── EnableSourceAction.kt │ │ │ ├── command │ │ │ ├── CommandBarController.kt │ │ │ ├── action │ │ │ │ └── CommandBarAction.kt │ │ │ ├── status │ │ │ │ ├── LiveStatusBarManagerImpl.kt │ │ │ │ └── ui │ │ │ │ │ ├── BreakpointStatusBar.java │ │ │ │ │ ├── BreakpointStatusBar.jfd │ │ │ │ │ ├── LiveMeterStatusPanel.java │ │ │ │ │ ├── LiveMeterStatusPanel.jfd │ │ │ │ │ ├── LogStatusBar.java │ │ │ │ │ ├── LogStatusBar.jfd │ │ │ │ │ ├── MeterStatusBar.java │ │ │ │ │ ├── MeterStatusBar.jfd │ │ │ │ │ ├── SpanStatusBar.java │ │ │ │ │ ├── SpanStatusBar.jfd │ │ │ │ │ ├── config │ │ │ │ │ ├── LiveBreakpointConfigurationPanel.java │ │ │ │ │ ├── LiveBreakpointConfigurationPanel.jfd │ │ │ │ │ ├── LiveLogConfigurationPanel.java │ │ │ │ │ ├── LiveLogConfigurationPanel.jfd │ │ │ │ │ ├── LiveMeterConfigurationPanel.java │ │ │ │ │ └── LiveMeterConfigurationPanel.jfd │ │ │ │ │ └── element │ │ │ │ │ ├── AutocompleteDropdown.java │ │ │ │ │ ├── AutocompleteDropdown.jfd │ │ │ │ │ ├── AutocompleteRow.java │ │ │ │ │ ├── AutocompleteRow.jfd │ │ │ │ │ ├── LiveControlBarRow.java │ │ │ │ │ └── LiveControlBarRow.jfd │ │ │ ├── ui │ │ │ │ ├── ControlBar.java │ │ │ │ ├── ControlBar.jfd │ │ │ │ └── util │ │ │ │ │ ├── ControlBarCellRenderer.kt │ │ │ │ │ └── LiveCommandFieldRow.kt │ │ │ └── util │ │ │ │ ├── AutocompleteCellRenderer.kt │ │ │ │ ├── AutocompleteField.kt │ │ │ │ ├── AutocompleteFieldRow.kt │ │ │ │ └── ExpressionUtils.kt │ │ │ ├── config │ │ │ ├── PortalConfig.kt │ │ │ ├── SourceMarkerConfig.kt │ │ │ ├── SourceMarkerConfigurable.kt │ │ │ └── ui │ │ │ │ ├── PluginConfigurationPanel.form │ │ │ │ └── PluginConfigurationPanel.java │ │ │ ├── discover │ │ │ └── TCPServiceDiscoveryBackend.kt │ │ │ ├── instrument │ │ │ ├── InstrumentEventWindowService.kt │ │ │ ├── InstrumentNavigationHandler.kt │ │ │ ├── LiveInstrumentEventListener.kt │ │ │ ├── breakpoint │ │ │ │ ├── ExecutionPointManager.kt │ │ │ │ ├── VariableEditorLinePainter.kt │ │ │ │ ├── model │ │ │ │ │ ├── ActiveStackTrace.kt │ │ │ │ │ └── ActiveStackTraceListener.kt │ │ │ │ ├── tree │ │ │ │ │ ├── VariableRootSimpleNode.kt │ │ │ │ │ └── VariableSimpleTreeStructure.kt │ │ │ │ └── ui │ │ │ │ │ ├── BreakpointHitTab.kt │ │ │ │ │ ├── FramesPanel.kt │ │ │ │ │ └── VariablesPanel.kt │ │ │ └── ui │ │ │ │ ├── InstrumentEventTab.kt │ │ │ │ ├── InstrumentOverviewTab.kt │ │ │ │ └── action │ │ │ │ ├── ClearInstrumentsAction.kt │ │ │ │ └── RemoveInstrumentAction.kt │ │ │ ├── reporting │ │ │ └── ErrorReporter.kt │ │ │ ├── status │ │ │ ├── SourceStatusBarWidget.kt │ │ │ ├── SourceStatusServiceImpl.kt │ │ │ ├── SourceWidgetFactory.kt │ │ │ └── action │ │ │ │ └── SourceStatusItemAction.kt │ │ │ ├── vcs │ │ │ └── CodeChangeListener.kt │ │ │ └── view │ │ │ ├── LiveViewChartManagerImpl.kt │ │ │ ├── LiveViewEventListener.kt │ │ │ ├── LiveViewLogManagerImpl.kt │ │ │ ├── LiveViewTraceManagerImpl.kt │ │ │ ├── action │ │ │ ├── ChangeChartAction.kt │ │ │ ├── ChangeTimeAction.kt │ │ │ ├── ResumeViewAction.kt │ │ │ ├── SetRefreshIntervalAction.kt │ │ │ └── StopViewAction.kt │ │ │ ├── trace │ │ │ ├── LiveViewTraceModel.kt │ │ │ ├── LiveViewTraceRowSorter.kt │ │ │ ├── LiveViewTraceTreeStructure.kt │ │ │ ├── TraceSpanSplitterPanel.kt │ │ │ ├── column │ │ │ │ └── TraceRowColumnInfo.kt │ │ │ ├── renderer │ │ │ │ └── SpanEventTableCellRenderer.kt │ │ │ └── table │ │ │ │ ├── TraceSpanTable.kt │ │ │ │ └── TraceSpanTreeTable.kt │ │ │ └── window │ │ │ ├── LiveActivityWindow.kt │ │ │ ├── LiveEndpointsWindow.kt │ │ │ ├── LiveLogWindowImpl.kt │ │ │ ├── LiveViewChartWindowImpl.kt │ │ │ └── LiveViewTraceWindowImpl.kt │ └── resources │ │ ├── META-INF │ │ ├── plugin.xml │ │ ├── pluginIcon.svg │ │ ├── pluginIcon_dark.svg │ │ ├── services │ │ │ └── io.vertx.servicediscovery.spi.ServiceDiscoveryBackend │ │ ├── withGroovy.xml │ │ ├── withJava.xml │ │ ├── withJavascript.xml │ │ ├── withJavascriptDebugger.xml │ │ ├── withKotlin.xml │ │ ├── withPython.xml │ │ └── withRust.xml │ │ ├── fonts │ │ ├── Roboto-Light.ttf │ │ ├── Roboto-Regular.ttf │ │ └── chinese.msyh.ttf │ │ └── icons │ │ ├── angle-down.svg │ │ ├── angle-down_dark.svg │ │ ├── breakpoint-config.svg │ │ ├── breakpoint-config_dark.svg │ │ ├── breakpoint │ │ ├── live-breakpoint-active.svg │ │ ├── live-breakpoint-complete.svg │ │ ├── live-breakpoint-error.svg │ │ └── live-breakpoint-foreign.svg │ │ ├── chart-mixed.svg │ │ ├── check.svg │ │ ├── clock-rotate-left.svg │ │ ├── clock.svg │ │ ├── clock_dark.svg │ │ ├── close.svg │ │ ├── closeHovered.svg │ │ ├── closeHovered_dark.svg │ │ ├── closePressed.svg │ │ ├── closePressed_dark.svg │ │ ├── close_dark.svg │ │ ├── command │ │ └── logo.svg │ │ ├── count.svg │ │ ├── count_dark.svg │ │ ├── error-bug.svg │ │ ├── expand.svg │ │ ├── expandHovered.svg │ │ ├── expandHovered_dark.svg │ │ ├── expandPressed.svg │ │ ├── expandPressed_dark.svg │ │ ├── expand_dark.svg │ │ ├── eye-slash.svg │ │ ├── eye-slash_dark.svg │ │ ├── gauge.svg │ │ ├── histogram.svg │ │ ├── instrument │ │ ├── live-log │ │ │ ├── live-log-active.svg │ │ │ ├── live-log-active_dark.svg │ │ │ ├── live-log-foreign.svg │ │ │ ├── live-log-foreign_dark.svg │ │ │ ├── save.svg │ │ │ ├── saveHovered.svg │ │ │ └── savePressed.svg │ │ └── overview │ │ │ ├── plug-circle-bolt.svg │ │ │ ├── plug-circle-check.svg │ │ │ ├── plug-circle-exclamation.svg │ │ │ └── plug-circle-xmark.svg │ │ ├── log-config.svg │ │ ├── log-config_dark.svg │ │ ├── meter-config.svg │ │ ├── meter-config_dark.svg │ │ ├── minimize.svg │ │ ├── minimizeHovered.svg │ │ ├── minimizeHovered_dark.svg │ │ ├── minimizePressed.svg │ │ ├── minimizePressed_dark.svg │ │ ├── minimize_dark.svg │ │ ├── play.svg │ │ ├── rotate.svg │ │ ├── span-config.svg │ │ ├── span-config_dark.svg │ │ ├── square-check.svg │ │ ├── square-dashed.svg │ │ ├── statusBar │ │ ├── status-disabled.svg │ │ ├── status-disabled_dark.svg │ │ ├── status-enabled.svg │ │ ├── status-enabled_dark.svg │ │ ├── status-failed.svg │ │ ├── status-failed_dark.svg │ │ ├── status-pending.svg │ │ └── status-pending_dark.svg │ │ ├── stop.svg │ │ ├── tool-window │ │ ├── chart-area.svg │ │ ├── chart-area_dark.svg │ │ ├── list-tree.svg │ │ ├── list-tree_dark.svg │ │ ├── memo.svg │ │ ├── memo_dark.svg │ │ ├── satellite-dish.svg │ │ └── satellite-dish_dark.svg │ │ ├── trash-can.svg │ │ ├── trash-list.svg │ │ ├── trash.svg │ │ ├── triangle-exclamation.svg │ │ ├── user.svg │ │ ├── xmark-large.svg │ │ └── xmark.svg │ └── test │ └── kotlin │ └── spp │ └── jetbrains │ └── instrument │ └── log │ └── VariableParserTest.kt ├── renovate.json └── settings.gradle /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | .idea 3 | build 4 | out 5 | test/e2e/apache-skywalking-apm-* -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "commander"] 2 | path = commander 3 | url = https://github.com/sourceplusplus/jetbrains-commander 4 | branch = master 5 | -------------------------------------------------------------------------------- /core/src/main/kotlin/spp/jetbrains/SourceKey.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains 18 | 19 | import com.intellij.openapi.util.Key 20 | 21 | /** 22 | * Used to associate custom data to PSI elements. 23 | * 24 | * @since 0.1.0 25 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 26 | */ 27 | data class SourceKey(val name: String) { 28 | companion object { 29 | private val keyCache = mutableMapOf>() 30 | } 31 | 32 | fun asPsiKey(): Key { 33 | return keyCache.computeIfAbsent(name) { Key.create(it) } as Key 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /core/src/main/kotlin/spp/jetbrains/artifact/model/ArtifactBinaryExpression.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.artifact.model 18 | 19 | import com.intellij.psi.PsiElement 20 | 21 | abstract class ArtifactBinaryExpression(psiElement: PsiElement) : ArtifactElement(psiElement) { 22 | 23 | abstract fun getOperator(): String 24 | abstract fun getLeftExpression(): ArtifactElement? 25 | abstract fun getRightExpression(): ArtifactElement? 26 | } 27 | -------------------------------------------------------------------------------- /core/src/main/kotlin/spp/jetbrains/artifact/model/ArtifactLiteralValue.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.artifact.model 18 | 19 | import com.intellij.psi.PsiElement 20 | 21 | abstract class ArtifactLiteralValue(psiElement: PsiElement) : ArtifactElement(psiElement) { 22 | abstract val value: Any? 23 | } 24 | -------------------------------------------------------------------------------- /core/src/main/kotlin/spp/jetbrains/artifact/model/BlockArtifact.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.artifact.model 18 | 19 | import com.intellij.psi.PsiElement 20 | 21 | abstract class BlockArtifact(psiElement: PsiElement) : ArtifactElement(psiElement) { 22 | 23 | abstract override fun clone(): BlockArtifact 24 | } 25 | -------------------------------------------------------------------------------- /core/src/main/kotlin/spp/jetbrains/artifact/model/CallArtifact.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.artifact.model 18 | 19 | import com.intellij.psi.PsiElement 20 | 21 | abstract class CallArtifact(psiElement: PsiElement) : ArtifactElement(psiElement) { 22 | abstract fun resolveFunction(): FunctionArtifact? 23 | abstract fun getArguments(): List 24 | open fun getName(): String? = null 25 | 26 | private var resolvedFunction: FunctionArtifact? = null 27 | fun getResolvedFunction(): FunctionArtifact? { 28 | if (resolvedFunction == null || resolvedFunction?.isValid == false) { 29 | resolvedFunction = resolveFunction() 30 | } 31 | return resolvedFunction 32 | } 33 | 34 | override fun toString(): String { 35 | return "CallArtifact($text)" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /core/src/main/kotlin/spp/jetbrains/artifact/model/ControlStructureArtifact.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.artifact.model 18 | 19 | import com.intellij.psi.PsiElement 20 | 21 | /** 22 | * A control structure artifact refers to things that control the flow of a program: 23 | * - conditionals (i.e. if/elif/else) 24 | * - for-loops, while-loops, do-while loops 25 | * - try-catch-finally 26 | * - switch statements 27 | */ 28 | abstract class ControlStructureArtifact(psiElement: PsiElement) : ArtifactElement(psiElement) { 29 | abstract val childArtifacts: MutableList 30 | } 31 | -------------------------------------------------------------------------------- /core/src/main/kotlin/spp/jetbrains/artifact/model/ForLoopArtifact.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.artifact.model 18 | 19 | import com.intellij.psi.PsiElement 20 | 21 | abstract class ForLoopArtifact(psiElement: PsiElement) : LoopArtifact(psiElement) 22 | -------------------------------------------------------------------------------- /core/src/main/kotlin/spp/jetbrains/artifact/model/FunctionArtifact.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.artifact.model 18 | 19 | import com.intellij.psi.PsiElement 20 | import com.intellij.psi.PsiNameIdentifierOwner 21 | 22 | abstract class FunctionArtifact( 23 | override val psiElement: PsiNameIdentifierOwner 24 | ) : ArtifactElement(psiElement), PsiNameIdentifierOwner { 25 | 26 | val parameters: MutableList = mutableListOf() 27 | abstract val bodyBlock: BlockArtifact? 28 | override fun getName(): String? = psiElement.name 29 | override fun setName(name: String): PsiElement = psiElement.setName(name) 30 | override fun getNameIdentifier(): PsiElement? = psiElement.nameIdentifier 31 | 32 | abstract fun getAnnotations(): List 33 | } 34 | -------------------------------------------------------------------------------- /core/src/main/kotlin/spp/jetbrains/artifact/model/LoopArtifact.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.artifact.model 18 | 19 | import com.intellij.psi.PsiElement 20 | 21 | /** 22 | * Represents for/while/do-while control structures. 23 | */ 24 | abstract class LoopArtifact(psiElement: PsiElement) : ControlStructureArtifact(psiElement) { 25 | abstract val condition: ArtifactElement? 26 | abstract val body: ArtifactElement? 27 | } 28 | -------------------------------------------------------------------------------- /core/src/main/kotlin/spp/jetbrains/artifact/model/ReferenceArtifact.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.artifact.model 18 | 19 | import com.intellij.psi.PsiElement 20 | 21 | /** 22 | * Represents a reference to another artifact. 23 | * 24 | * @since 0.7.8 25 | */ 26 | abstract class ReferenceArtifact(psiElement: PsiElement) : ArtifactElement(psiElement) { 27 | 28 | abstract fun isFunctionParameter(): Boolean 29 | abstract fun getFunctionParameterIndex(): Int 30 | 31 | abstract fun resolve(): ArtifactElement? 32 | } 33 | -------------------------------------------------------------------------------- /core/src/main/kotlin/spp/jetbrains/artifact/service/define/IArtifactModelService.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.artifact.service.define 18 | 19 | import com.intellij.psi.PsiElement 20 | import spp.jetbrains.artifact.model.ArtifactElement 21 | 22 | /** 23 | * Language-agnostic artifact model service. 24 | * 25 | * @since 0.7.5 26 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 27 | */ 28 | interface IArtifactModelService : ISourceMarkerService { 29 | 30 | fun toArtifact(element: PsiElement): ArtifactElement? 31 | } 32 | -------------------------------------------------------------------------------- /core/src/main/kotlin/spp/jetbrains/artifact/service/define/ISourceMarkerService.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.artifact.service.define 18 | 19 | interface ISourceMarkerService 20 | -------------------------------------------------------------------------------- /core/src/main/kotlin/spp/jetbrains/command/util/CircularList.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.command.util 18 | 19 | class CircularList(private val maxCapacity: Int) : ArrayList() { 20 | 21 | override fun add(element: E): Boolean { 22 | if (size == maxCapacity) { 23 | removeLast() 24 | } 25 | return super.add(element) 26 | } 27 | 28 | override fun add(index: Int, element: E) { 29 | if (size == maxCapacity) { 30 | removeLast() 31 | } 32 | super.add(index, element) 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /core/src/main/kotlin/spp/jetbrains/instrument/presentation/ErrorVariableSimpleNode.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.instrument.presentation 18 | 19 | import com.intellij.ide.projectView.PresentationData 20 | import com.intellij.ui.SimpleTextAttributes 21 | import com.intellij.ui.treeStructure.SimpleNode 22 | 23 | class ErrorVariableSimpleNode(private val nodeData: Map) : SimpleNode() { 24 | override fun getChildren(): Array = emptyArray() 25 | 26 | override fun update(presentation: PresentationData) { 27 | presentation.addText("${nodeData["@skip"]}", SimpleTextAttributes.ERROR_ATTRIBUTES) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /core/src/main/kotlin/spp/jetbrains/state/LiveStateBar.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.state 18 | 19 | import com.intellij.openapi.Disposable 20 | import spp.protocol.instrument.LiveInstrument 21 | 22 | /** 23 | * todo: description. 24 | * 25 | * @since 0.4.0 26 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 27 | */ 28 | interface LiveStateBar : Disposable { 29 | 30 | fun setLiveInstrument(liveInstrument: LiveInstrument) 31 | } 32 | -------------------------------------------------------------------------------- /core/src/main/kotlin/spp/jetbrains/status/SourceStatusListener.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.status 18 | 19 | /** 20 | * Listener for changes to the current status of the Source++ plugin. 21 | * 22 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 23 | */ 24 | fun interface SourceStatusListener { 25 | fun onStatusChanged(status: SourceStatus) 26 | } 27 | -------------------------------------------------------------------------------- /core/src/main/kotlin/spp/jetbrains/view/ResumableView.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.view 18 | 19 | import com.intellij.openapi.Disposable 20 | 21 | /** 22 | * todo: description. 23 | * 24 | * @since 0.7.6 25 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 26 | */ 27 | interface ResumableView : Disposable { 28 | val isRunning: Boolean 29 | val refreshInterval: Int 30 | 31 | fun onFocused() = Unit 32 | fun resume() 33 | fun pause() 34 | fun setRefreshInterval(interval: Int) 35 | fun supportsRealtime(): Boolean = false 36 | } 37 | -------------------------------------------------------------------------------- /core/src/main/kotlin/spp/jetbrains/view/ResumableViewManager.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.view 18 | 19 | import com.intellij.openapi.Disposable 20 | 21 | /** 22 | * todo: description. 23 | * 24 | * @since 0.7.6 25 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 26 | */ 27 | interface ResumableViewManager : Disposable { 28 | val currentView: ResumableView? 29 | val refreshInterval: Int? 30 | } 31 | -------------------------------------------------------------------------------- /core/src/main/kotlin/spp/jetbrains/view/model/ServiceEndpointRow.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.view.model 18 | 19 | import spp.protocol.platform.general.ServiceEndpoint 20 | 21 | /** 22 | * todo: description. 23 | * 24 | * @since 0.7.6 25 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 26 | */ 27 | data class ServiceEndpointRow( 28 | val endpoint: ServiceEndpoint, 29 | var cpm: Int = 0, 30 | var sla: Double = 0.0, 31 | var respTimeAvg: Int = 0 32 | ) 33 | -------------------------------------------------------------------------------- /core/src/main/kotlin/spp/jetbrains/view/window/LiveTraceWindow.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.view.window 18 | 19 | import spp.jetbrains.view.ResumableView 20 | import spp.protocol.artifact.trace.Trace 21 | import spp.protocol.view.LiveView 22 | 23 | /** 24 | * todo: description. 25 | * 26 | * @since 0.7.6 27 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 28 | */ 29 | interface LiveTraceWindow : ResumableView { 30 | val liveView: LiveView 31 | fun addTrace(trace: Trace) 32 | } 33 | -------------------------------------------------------------------------------- /core/src/main/kotlin/spp/jetbrains/view/window/util/TabbedResumableView.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.view.window.util 18 | 19 | import com.intellij.ui.components.JBTabbedPane 20 | import com.intellij.util.ui.JBUI 21 | import spp.jetbrains.view.ResumableView 22 | import spp.jetbrains.view.ResumableViewCollection 23 | import javax.swing.JComponent 24 | 25 | /** 26 | * todo: description. 27 | * 28 | * @since 0.7.6 29 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 30 | */ 31 | abstract class TabbedResumableView : ResumableViewCollection() { 32 | 33 | val component: JBTabbedPane = JBTabbedPane() 34 | 35 | init { 36 | component.tabComponentInsets = JBUI.emptyInsets() 37 | } 38 | 39 | fun addTab(title: String, view: ResumableView, viewComponent: JComponent) { 40 | component.insertTab(title, null, viewComponent, null, size) 41 | addView(view) 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /detekt.yml: -------------------------------------------------------------------------------- 1 | # Default detekt configuration: 2 | # https://github.com/detekt/detekt/blob/master/detekt-core/src/main/resources/default-detekt-config.yml 3 | 4 | build: 5 | maxIssues: 6 #todo: zero out 6 | 7 | formatting: 8 | Indentation: 9 | active: false 10 | CommentSpacing: 11 | active: false 12 | NoWildcardImports: 13 | active: false 14 | ChainWrapping: 15 | active: false 16 | Wrapping: 17 | active: false 18 | ArgumentListWrapping: 19 | active: false 20 | MultiLineIfElse: 21 | active: false 22 | AnnotationOnSeparateLine: 23 | active: false 24 | 25 | style: 26 | MagicNumber: 27 | active: false 28 | ForbiddenComment: 29 | active: false 30 | ReturnCount: 31 | active: false 32 | WildcardImport: 33 | active: false 34 | MaxLineLength: 35 | excludes: [ '**/test/**' ] 36 | 37 | exceptions: 38 | TooGenericExceptionCaught: 39 | active: false 40 | TooGenericExceptionThrown: 41 | excludes: [ '**/test/**' ] 42 | 43 | complexity: 44 | NestedBlockDepth: 45 | threshold: 5 46 | TooManyFunctions: 47 | thresholdInClasses: 15 48 | thresholdInObjects: 15 49 | LongParameterList: 50 | functionThreshold: 10 51 | constructorThreshold: 10 52 | LongMethod: 53 | excludes: [ '**/test/**' ] 54 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m 2 | org.gradle.parallel=true 3 | 4 | kotlin.code.style=official 5 | 6 | pluginGroup=plus.sourceplus 7 | pluginName=Source++ 8 | pluginRepositoryUrl=https://github.com/sourceplusplus/interface-jetbrains 9 | 10 | projectVersion=0.7.10-SNAPSHOT 11 | pluginSinceBuild=231 12 | 13 | platformType=IU 14 | ideVersion=2023.2.2 15 | platformDownloadSources=true 16 | # Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html 17 | # Example: platformPlugins = com.intellij.java, com.jetbrains.php:203.4449.22 18 | platformPlugins=java 19 | 20 | # Opt-out flag for bundling Kotlin standard library -> https://plugins.jetbrains.com/docs/intellij/kotlin.html#kotlin-standard-library 21 | # suppress inspection "UnusedProperty" 22 | kotlin.stdlib.default.dependency=false 23 | 24 | ## Enable Gradle Configuration Cache -> https://docs.gradle.org/current/userguide/configuration_cache.html 25 | ## suppress inspection "UnusedProperty" 26 | #org.gradle.unsafe.configuration-cache=true 27 | 28 | vertxVersion=4.4.4 29 | jacksonVersion=2.15.2 30 | joorVersion=0.9.14 31 | jupiterVersion=5.10.0 32 | guavaVersion=32.1.2-jre 33 | 34 | kotlinVersion=1.8.21 35 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sourceplusplus/interface-jetbrains/199006a410529d961dc184f0740a5d845bd87899/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /insight/src/main/kotlin/spp/jetbrains/insight/InsightPassConfig.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.insight 18 | 19 | data class InsightPassConfig( 20 | var analyzeResolvedFunctions: Boolean = true 21 | ) 22 | -------------------------------------------------------------------------------- /insight/src/main/kotlin/spp/jetbrains/insight/pass/ArtifactPass.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.insight.pass 18 | 19 | import spp.jetbrains.artifact.model.ArtifactElement 20 | 21 | /** 22 | * A pass that analyzes an [ArtifactElement] and adds data to it. 23 | */ 24 | abstract class ArtifactPass : InsightPass() { 25 | abstract fun analyze(element: ArtifactElement) 26 | } 27 | -------------------------------------------------------------------------------- /insight/src/main/kotlin/spp/jetbrains/insight/pass/InsightPass.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.insight.pass 18 | 19 | import spp.jetbrains.artifact.model.ArtifactElement 20 | import spp.jetbrains.insight.InsightPassConfig 21 | import spp.jetbrains.insight.InsightPassProvider 22 | import spp.jetbrains.insight.ProceduralAnalyzer 23 | 24 | /** 25 | * Abstract class for passes that analyze data. 26 | */ 27 | abstract class InsightPass { 28 | lateinit var analyzer: ProceduralAnalyzer 29 | lateinit var rootArtifact: ArtifactElement 30 | val provider: InsightPassProvider 31 | get() = analyzer.passProvider 32 | val config: InsightPassConfig 33 | get() = analyzer.passConfig 34 | } 35 | -------------------------------------------------------------------------------- /insight/src/main/kotlin/spp/jetbrains/insight/pass/ProceduralMultiPathPass.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.insight.pass 18 | 19 | import spp.jetbrains.insight.path.ProceduralMultiPath 20 | 21 | /** 22 | * A pass that analyzes a [ProceduralMultiPath]. 23 | */ 24 | abstract class ProceduralMultiPathPass : InsightPass() { 25 | open fun preProcess(multiPath: ProceduralMultiPath): ProceduralMultiPath = multiPath 26 | open fun analyze(multiPath: ProceduralMultiPath): ProceduralMultiPath = multiPath 27 | open fun postProcess(multiPath: ProceduralMultiPath): ProceduralMultiPath = multiPath 28 | } 29 | -------------------------------------------------------------------------------- /insight/src/main/kotlin/spp/jetbrains/insight/pass/ProceduralPathPass.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.insight.pass 18 | 19 | import spp.jetbrains.insight.path.ProceduralPath 20 | 21 | /** 22 | * A pass that analyzes an [ProceduralPath] and adds data to it. 23 | */ 24 | abstract class ProceduralPathPass : InsightPass() { 25 | abstract fun analyze(path: ProceduralPath) 26 | } 27 | -------------------------------------------------------------------------------- /insight/src/main/kotlin/spp/jetbrains/insight/pass/multipath/SavePsiMultiPathPass.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.insight.pass.multipath 18 | 19 | import spp.jetbrains.insight.InsightKeys 20 | import spp.jetbrains.insight.pass.ProceduralMultiPathPass 21 | import spp.jetbrains.insight.path.ProceduralMultiPath 22 | import spp.jetbrains.insight.path.ProceduralPath 23 | 24 | /** 25 | * Saves the [ProceduralPath] set to the root artifact PSI element for later use. 26 | */ 27 | class SavePsiMultiPathPass : ProceduralMultiPathPass() { 28 | 29 | override fun postProcess(multiPath: ProceduralMultiPath): ProceduralMultiPath { 30 | multiPath.forEach { it.rootArtifact.putUserData(InsightKeys.PROCEDURAL_MULTI_PATH.asPsiKey(), multiPath) } 31 | return super.postProcess(multiPath) 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /insight/src/main/kotlin/spp/jetbrains/insight/path/ProceduralMultiPath.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.insight.path 18 | 19 | /** 20 | * A collection of [ProceduralPath]s that are all possible paths through a function. 21 | */ 22 | data class ProceduralMultiPath( 23 | val paths: List 24 | ) : Iterable { 25 | override fun iterator(): Iterator = paths.iterator() 26 | val size = paths.size 27 | } 28 | -------------------------------------------------------------------------------- /insight/src/test/testData/java/BranchProbability.java: -------------------------------------------------------------------------------- 1 | public class BranchProbability { 2 | public void oneFourthProbability() { 3 | if (java.lang.Math.random() > 0.5) { 4 | if (java.lang.Math.random() > 0.5) { 5 | System.out.println(true); 6 | } 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /insight/src/test/testData/java/CountingLoop.java: -------------------------------------------------------------------------------- 1 | public class CountingLoop { 2 | public void countingLoop() { 3 | for (int i = 0; i < 10; i++) { 4 | Thread.sleep(100); 5 | } 6 | for (int i = 0; i < 10; i++) ; 7 | } 8 | } -------------------------------------------------------------------------------- /insight/src/test/testData/java/DeadCodeDuration.java: -------------------------------------------------------------------------------- 1 | public class DeadCodeDuration { 2 | public void code1() { 3 | if (false) { 4 | Thread.sleep(200); 5 | } 6 | Thread.sleep(200); 7 | } 8 | 9 | public void code2() { 10 | if (false) { 11 | Thread.sleep(200); 12 | } else { 13 | Thread.sleep(200); 14 | Thread.sleep(200); 15 | } 16 | Thread.sleep(200); 17 | } 18 | } -------------------------------------------------------------------------------- /insight/src/test/testData/java/InnerBranchProbability.java: -------------------------------------------------------------------------------- 1 | public class InnerBranchProbability { 2 | public void booleanConstant() { 3 | System.out.println(true); 4 | 5 | if (false) { 6 | if (true) { 7 | System.out.println(false); 8 | } 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /insight/src/test/testData/java/LiteralBranchProbability.java: -------------------------------------------------------------------------------- 1 | public class LiteralBranchProbability { 2 | public void booleanConstant() { 3 | if (true) { 4 | System.out.println(true); 5 | } else { 6 | System.out.println(false); 7 | } 8 | } 9 | 10 | public void numberCompare() { 11 | if (1 == 1) { 12 | System.out.println(true); 13 | } else { 14 | System.out.println(false); 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /insight/src/test/testData/java/MultiInsight.java: -------------------------------------------------------------------------------- 1 | public class MultiInsight { 2 | public void probabilityAndDuration() { 3 | if (java.lang.Math.random() > 0.5) { //sleep 100ms 4 | if (java.lang.Math.random() > 0.5) { //sleep 100ms 5 | Thread.sleep(200); 6 | } 7 | } else { 8 | Thread.sleep(200); 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /insight/src/test/testData/java/PassVariable.java: -------------------------------------------------------------------------------- 1 | public class PassVariable { 2 | public void literalPass() { 3 | doSleep(true); 4 | } 5 | 6 | private void doSleep(boolean sleep) { 7 | if (sleep) { 8 | Thread.sleep(200) 9 | } 10 | } 11 | 12 | public void literalPass2() { 13 | doSleep2(true); 14 | } 15 | 16 | private void doSleep2(boolean sleep) { 17 | doSleep(sleep); 18 | } 19 | 20 | public void literalPass3() { 21 | literalPass2(); 22 | } 23 | 24 | public void literalPass4() { 25 | doSleep4(false); 26 | } 27 | 28 | private void doSleep4(boolean sleep) { 29 | if (sleep) { 30 | } 31 | Thread.sleep(200); 32 | } 33 | 34 | private void literalPass5() { 35 | doSleep5(false); 36 | } 37 | 38 | private void doSleep5(boolean sleep) { 39 | if (sleep) { 40 | Thread.sleep(400); 41 | } 42 | Thread.sleep(200); 43 | } 44 | 45 | private void literalPass6() { 46 | doSleep(false); 47 | } 48 | 49 | private void literalPass7() { 50 | literalPass7_1(false); 51 | } 52 | 53 | private void literalPass7_1(boolean sleep) { 54 | literalPass7_2(sleep); 55 | } 56 | 57 | private void literalPass7_2(boolean sleep) { 58 | if (sleep) { 59 | Thread.sleep(100); 60 | Thread.sleep(100); 61 | } 62 | Thread.sleep(100); 63 | } 64 | } -------------------------------------------------------------------------------- /insight/src/test/testData/java/RandomConditional.java: -------------------------------------------------------------------------------- 1 | public class RandomConditional { 2 | public void randomConditional() { 3 | if (java.lang.Math.random() <= 0.25) { 4 | Thread.sleep(4000); 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /insight/src/test/testData/java/ReanalyzeDuration.java: -------------------------------------------------------------------------------- 1 | public class ReanalyzeDuration { 2 | public void code1() { 3 | code2(); 4 | } 5 | 6 | public void code2() { 7 | Thread.sleep(200); 8 | } 9 | } -------------------------------------------------------------------------------- /insight/src/test/testData/java/Recursion.java: -------------------------------------------------------------------------------- 1 | public class Recursion { 2 | public void recursion() { 3 | recursion(); 4 | } 5 | } -------------------------------------------------------------------------------- /insight/src/test/testData/java/SequentialMethodCalls.java: -------------------------------------------------------------------------------- 1 | public class SequentialMethodCalls { 2 | public void oneCall() { 3 | duration500ms(); 4 | } 5 | 6 | public void twoCalls() { 7 | duration500ms(); 8 | duration500ms(); 9 | } 10 | 11 | public void duration500ms() { 12 | } 13 | } -------------------------------------------------------------------------------- /insight/src/test/testData/java/SimplifyBranch.java: -------------------------------------------------------------------------------- 1 | public class SimplifyBranch { 2 | public void simplifyBranch() { 3 | if (true) { 4 | Thread.sleep(100); 5 | } 6 | Thread.sleep(100); 7 | } 8 | 9 | public void simplifyBranch2() { 10 | Thread.sleep(100); 11 | if (true) { 12 | Thread.sleep(100); 13 | } 14 | Thread.sleep(100); 15 | } 16 | } -------------------------------------------------------------------------------- /insight/src/test/testData/java/StaticDfa.java: -------------------------------------------------------------------------------- 1 | public class StaticDfa { 2 | public void staticDfa() { 3 | if (0.4 < 0.5) { 4 | System.out.println(true); 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /insight/src/test/testData/java/ThreadSleep.java: -------------------------------------------------------------------------------- 1 | public class ThreadSleep { 2 | public void sleep() { 3 | Thread.sleep(1000); 4 | } 5 | } -------------------------------------------------------------------------------- /insight/src/test/testData/java/UnbalancedBranchProbability.java: -------------------------------------------------------------------------------- 1 | public class UnbalancedBranchProbability { 2 | public void unbalancedBranchProbability() { 3 | if (java.lang.Math.random() > 0.75) { 4 | System.out.println(true); //25% probability 5 | } else { 6 | System.out.println(false); //75% probability 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /insight/src/test/testData/javascript/BranchProbability.js: -------------------------------------------------------------------------------- 1 | function oneFourthProbability() { 2 | if (Math.random() > 0.5) { 3 | if (Math.random() > 0.5) { 4 | console.log(true); 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /insight/src/test/testData/javascript/DeadCodeDuration.js: -------------------------------------------------------------------------------- 1 | function code1() { 2 | if (false) { 3 | Thread.sleep(200); 4 | } 5 | Thread.sleep(200); 6 | } 7 | 8 | function code2() { 9 | if (false) { 10 | Thread.sleep(200); 11 | } else { 12 | Thread.sleep(200); 13 | Thread.sleep(200); 14 | } 15 | Thread.sleep(200); 16 | } -------------------------------------------------------------------------------- /insight/src/test/testData/javascript/InnerBranchProbability.js: -------------------------------------------------------------------------------- 1 | function booleanConstant() { 2 | console.log(true); 3 | 4 | if (false) { 5 | if (true) { 6 | console.log(false); 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /insight/src/test/testData/javascript/LiteralBranchProbability.js: -------------------------------------------------------------------------------- 1 | function booleanConstant() { 2 | if (true) { 3 | console.log(true); 4 | } else { 5 | console.log(false); 6 | } 7 | } 8 | 9 | function numberCompare() { 10 | if (1 == 1) { 11 | console.log(true); 12 | } else { 13 | console.log(false); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /insight/src/test/testData/javascript/MultiInsight.js: -------------------------------------------------------------------------------- 1 | function probabilityAndDuration() { 2 | if (Math.random() > 0.5) { //sleep 100ms 3 | if (Math.random() > 0.5) { //sleep 100ms 4 | Thread.sleep(200); 5 | } 6 | } else { 7 | Thread.sleep(200); 8 | } 9 | } -------------------------------------------------------------------------------- /insight/src/test/testData/javascript/PassVariable.js: -------------------------------------------------------------------------------- 1 | function literalPass() { 2 | doSleep(true); 3 | } 4 | 5 | function doSleep(sleep) { 6 | if (sleep) { 7 | Thread.sleep(200); 8 | } 9 | } 10 | 11 | function literalPass2() { 12 | doSleep2(true); 13 | } 14 | 15 | function doSleep2(sleep) { 16 | doSleep(sleep); 17 | } 18 | 19 | function literalPass3() { 20 | literalPass2(); 21 | } 22 | 23 | function literalPass4() { 24 | doSleep4(false); 25 | } 26 | 27 | function doSleep4(sleep) { 28 | if (sleep) { 29 | } 30 | Thread.sleep(200); 31 | } 32 | 33 | function literalPass5() { 34 | doSleep5(false) 35 | } 36 | 37 | function doSleep5(sleep) { 38 | if (sleep) { 39 | Thread.sleep(400); 40 | } 41 | Thread.sleep(200); 42 | } 43 | 44 | function literalPass6() { 45 | doSleep(false); 46 | } 47 | 48 | function literalPass7() { 49 | literalPass7_1(false); 50 | } 51 | 52 | function literalPass7_1(sleep) { 53 | literalPass7_2(sleep); 54 | } 55 | 56 | function literalPass7_2(sleep) { 57 | if (sleep) { 58 | Thread.sleep(100); 59 | Thread.sleep(100); 60 | } 61 | Thread.sleep(100); 62 | } 63 | -------------------------------------------------------------------------------- /insight/src/test/testData/javascript/RandomConditional.js: -------------------------------------------------------------------------------- 1 | function randomConditional() { 2 | if (Math.random() <= 0.25) { 3 | console.log(true); 4 | } 5 | } -------------------------------------------------------------------------------- /insight/src/test/testData/javascript/ReanalyzeDuration.js: -------------------------------------------------------------------------------- 1 | function code1() { 2 | code2(); 3 | } 4 | 5 | function code2() { 6 | Thread.sleep(200); 7 | } -------------------------------------------------------------------------------- /insight/src/test/testData/javascript/Recursion.js: -------------------------------------------------------------------------------- 1 | function recursion() { 2 | recursion(); 3 | } -------------------------------------------------------------------------------- /insight/src/test/testData/javascript/SequentialMethodCalls.js: -------------------------------------------------------------------------------- 1 | function oneCall() { 2 | duration500ms(); 3 | } 4 | 5 | function twoCalls() { 6 | duration500ms(); 7 | duration500ms(); 8 | } 9 | 10 | function duration500ms() { 11 | } 12 | -------------------------------------------------------------------------------- /insight/src/test/testData/javascript/SimplifyBranch.js: -------------------------------------------------------------------------------- 1 | function simplifyBranch() { 2 | if (true) { 3 | Thread.sleep(100); 4 | } 5 | Thread.sleep(100); 6 | } 7 | 8 | function simplifyBranch2() { 9 | Thread.sleep(100); 10 | if (true) { 11 | Thread.sleep(100); 12 | } 13 | Thread.sleep(100); 14 | } -------------------------------------------------------------------------------- /insight/src/test/testData/javascript/UnbalancedBranchProbability.js: -------------------------------------------------------------------------------- 1 | function unbalancedBranchProbability() { 2 | if (Math.random() > 0.75) { 3 | console.log(true) //25% probability 4 | } else { 5 | console.log(false) //75% probability 6 | } 7 | } -------------------------------------------------------------------------------- /insight/src/test/testData/kotlin/BranchProbability.kt: -------------------------------------------------------------------------------- 1 | class BranchProbability { 2 | fun oneFourthProbability() { 3 | if (Math.random() > 0.5) { 4 | if (Math.random() > 0.5) { 5 | println(true) 6 | } 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /insight/src/test/testData/kotlin/DeadCodeDuration.kt: -------------------------------------------------------------------------------- 1 | class DeadCodeDuration { 2 | fun code1() { 3 | if (false) { 4 | Thread.sleep(200) 5 | } 6 | Thread.sleep(200) 7 | } 8 | 9 | fun code2() { 10 | if (false) { 11 | Thread.sleep(200) 12 | } else { 13 | Thread.sleep(200) 14 | Thread.sleep(200) 15 | } 16 | Thread.sleep(200) 17 | } 18 | } -------------------------------------------------------------------------------- /insight/src/test/testData/kotlin/InnerBranchProbability.kt: -------------------------------------------------------------------------------- 1 | class InnerBranchProbability { 2 | fun booleanConstant() { 3 | println(true) 4 | 5 | if (false) { 6 | if (true) { 7 | println(false) 8 | } 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /insight/src/test/testData/kotlin/LiteralBranchProbability.kt: -------------------------------------------------------------------------------- 1 | class LiteralBranchProbability { 2 | fun booleanConstant() { 3 | if (true) { 4 | println(true) 5 | } else { 6 | println(false) 7 | } 8 | } 9 | 10 | fun numberCompare() { 11 | if (1 == 1) { 12 | println(true) 13 | } else { 14 | println(false) 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /insight/src/test/testData/kotlin/MultiInsight.kt: -------------------------------------------------------------------------------- 1 | class MultiInsight { 2 | fun probabilityAndDuration() { 3 | if (Math.random() > 0.5) { //sleep 100ms 4 | if (Math.random() > 0.5) { //sleep 100ms 5 | Thread.sleep(200) 6 | } 7 | } else { 8 | Thread.sleep(200) 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /insight/src/test/testData/kotlin/PassVariable.kt: -------------------------------------------------------------------------------- 1 | class PassVariable { 2 | fun literalPass() { 3 | doSleep(true) 4 | } 5 | 6 | private fun doSleep(sleep: Boolean) { 7 | if (sleep) { 8 | Thread.sleep(200) 9 | } 10 | } 11 | 12 | fun literalPass2() { 13 | doSleep2(true); 14 | } 15 | 16 | private fun doSleep2(sleep: Boolean) { 17 | doSleep(sleep); 18 | } 19 | 20 | fun literalPass3() { 21 | literalPass2(); 22 | } 23 | 24 | fun literalPass4() { 25 | doSleep4(false) 26 | } 27 | 28 | private fun doSleep4(sleep: Boolean) { 29 | if (sleep) { 30 | } 31 | Thread.sleep(200) 32 | } 33 | 34 | fun literalPass5() { 35 | doSleep5(false) 36 | } 37 | 38 | private fun doSleep5(sleep: Boolean) { 39 | if (sleep) { 40 | Thread.sleep(400) 41 | } 42 | Thread.sleep(200) 43 | } 44 | 45 | fun literalPass6() { 46 | doSleep(false) 47 | } 48 | 49 | fun literalPass7() { 50 | literalPass7_1(false) 51 | } 52 | 53 | fun literalPass7_1(sleep: Boolean) { 54 | literalPass7_2(sleep) 55 | } 56 | 57 | fun literalPass7_2(sleep: Boolean) { 58 | if (sleep) { 59 | Thread.sleep(100) 60 | Thread.sleep(100) 61 | } 62 | Thread.sleep(100) 63 | } 64 | } -------------------------------------------------------------------------------- /insight/src/test/testData/kotlin/RandomConditional.kt: -------------------------------------------------------------------------------- 1 | class RandomConditional { 2 | fun randomConditional() { 3 | if (Math.random() <= 0.25) { 4 | Thread.sleep(4000); 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /insight/src/test/testData/kotlin/ReanalyzeDuration.kt: -------------------------------------------------------------------------------- 1 | class ReanalyzeDuration { 2 | fun code1() { 3 | code2() 4 | } 5 | 6 | fun code2() { 7 | Thread.sleep(200) 8 | } 9 | } -------------------------------------------------------------------------------- /insight/src/test/testData/kotlin/Recursion.kt: -------------------------------------------------------------------------------- 1 | class Recursion { 2 | fun recursion() { 3 | recursion() 4 | } 5 | } -------------------------------------------------------------------------------- /insight/src/test/testData/kotlin/SequentialMethodCalls.kt: -------------------------------------------------------------------------------- 1 | class SequentialMethodCalls { 2 | fun oneCall() { 3 | duration500ms() 4 | } 5 | 6 | fun twoCalls() { 7 | duration500ms() 8 | duration500ms() 9 | } 10 | 11 | fun duration500ms() {} 12 | } -------------------------------------------------------------------------------- /insight/src/test/testData/kotlin/SimplifyBranch.kt: -------------------------------------------------------------------------------- 1 | class SimplifyBranch { 2 | fun simplifyBranch() { 3 | if (true) { 4 | Thread.sleep(100) 5 | } 6 | Thread.sleep(100) 7 | } 8 | 9 | fun simplifyBranch2() { 10 | Thread.sleep(100) 11 | if (true) { 12 | Thread.sleep(100) 13 | } 14 | Thread.sleep(100) 15 | } 16 | } -------------------------------------------------------------------------------- /insight/src/test/testData/kotlin/StaticDfa.kt: -------------------------------------------------------------------------------- 1 | class StaticDfa { 2 | fun staticDfa() { 3 | if (0.4 < 0.5) { 4 | println(true) 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /insight/src/test/testData/kotlin/ThreadSleep.kt: -------------------------------------------------------------------------------- 1 | class ThreadSleep { 2 | fun sleep() { 3 | Thread.sleep(1000) 4 | } 5 | } -------------------------------------------------------------------------------- /insight/src/test/testData/kotlin/UnbalancedBranchProbability.kt: -------------------------------------------------------------------------------- 1 | class UnbalancedBranchProbability { 2 | fun unbalancedBranchProbability() { 3 | if (Math.random() > 0.75) { 4 | println(true) //25% probability 5 | } else { 6 | println(false) //75% probability 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /insight/src/test/testData/python/BranchProbability.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | 4 | def oneFourthProbability(): 5 | if random.random() > 0.5: 6 | if random.random() > 0.5: 7 | print(True) 8 | -------------------------------------------------------------------------------- /insight/src/test/testData/python/DeadCodeDuration.py: -------------------------------------------------------------------------------- 1 | def code1(): 2 | if False: 3 | Thread.sleep(200) 4 | 5 | Thread.sleep(200) 6 | 7 | 8 | def code2(): 9 | if False: 10 | Thread.sleep(200) 11 | else: 12 | Thread.sleep(200) 13 | Thread.sleep(200) 14 | 15 | Thread.sleep(200) 16 | -------------------------------------------------------------------------------- /insight/src/test/testData/python/InnerBranchProbability.py: -------------------------------------------------------------------------------- 1 | def booleanConstant(): 2 | print(true) 3 | 4 | if False: 5 | if True: 6 | print(False) 7 | -------------------------------------------------------------------------------- /insight/src/test/testData/python/LiteralBranchProbability.py: -------------------------------------------------------------------------------- 1 | def booleanConstant(): 2 | if True: 3 | print(True) 4 | else: 5 | print(False) 6 | 7 | 8 | def numberCompare(): 9 | if 1 == 1: 10 | print(True) 11 | else: 12 | print(False) 13 | -------------------------------------------------------------------------------- /insight/src/test/testData/python/MultiInsight.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | 4 | def probabilityAndDuration(): 5 | if random.random() > 0.5: # sleep 100ms 6 | if random.random() > 0.5: # sleep 100ms 7 | Thread.sleep(200) 8 | 9 | else: 10 | Thread.sleep(200) 11 | -------------------------------------------------------------------------------- /insight/src/test/testData/python/PassVariable.py: -------------------------------------------------------------------------------- 1 | def literalPass(): 2 | doSleep(True) 3 | 4 | 5 | def doSleep(sleep): 6 | if sleep: 7 | Thread.sleep(200) 8 | 9 | 10 | def literalPass2(): 11 | doSleep2(True) 12 | 13 | 14 | def doSleep2(sleep): 15 | doSleep(sleep) 16 | 17 | 18 | def literalPass3(): 19 | literalPass2() 20 | 21 | 22 | def literalPass4(): 23 | doSleep4(False) 24 | 25 | 26 | def doSleep4(sleep): 27 | if sleep: 28 | pass 29 | 30 | Thread.sleep(200) 31 | 32 | 33 | def literalPass5(): 34 | doSleep5(False) 35 | 36 | 37 | def doSleep5(sleep): 38 | if sleep: 39 | Thread.sleep(400) 40 | 41 | Thread.sleep(200) 42 | 43 | 44 | def literalPass6(): 45 | doSleep(False) 46 | 47 | 48 | def literalPass7(): 49 | literalPass7_1(False) 50 | 51 | 52 | def literalPass7_1(sleep): 53 | literalPass7_2(sleep) 54 | 55 | 56 | def literalPass7_2(sleep): 57 | if sleep: 58 | Thread.sleep(100) 59 | Thread.sleep(100) 60 | 61 | Thread.sleep(100) 62 | -------------------------------------------------------------------------------- /insight/src/test/testData/python/RandomConditional.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | 4 | def randomConditional(): 5 | if random.random() <= 0.25: 6 | print(True) 7 | -------------------------------------------------------------------------------- /insight/src/test/testData/python/ReanalyzeDuration.py: -------------------------------------------------------------------------------- 1 | def code1(): 2 | code2() 3 | 4 | 5 | def code2(): 6 | Thread.sleep(200) 7 | -------------------------------------------------------------------------------- /insight/src/test/testData/python/Recursion.py: -------------------------------------------------------------------------------- 1 | def recursion(): 2 | recursion() 3 | -------------------------------------------------------------------------------- /insight/src/test/testData/python/SequentialMethodCalls.py: -------------------------------------------------------------------------------- 1 | def oneCall(): 2 | duration500ms() 3 | 4 | 5 | def twoCalls(): 6 | duration500ms() 7 | duration500ms() 8 | 9 | 10 | def duration500ms(): 11 | pass 12 | -------------------------------------------------------------------------------- /insight/src/test/testData/python/SimplifyBranch.py: -------------------------------------------------------------------------------- 1 | def simplifyBranch(): 2 | if True: 3 | Thread.sleep(100) 4 | 5 | Thread.sleep(100) 6 | 7 | 8 | def simplifyBranch2(): 9 | Thread.sleep(100) 10 | if True: 11 | Thread.sleep(100) 12 | 13 | Thread.sleep(100) 14 | -------------------------------------------------------------------------------- /insight/src/test/testData/python/UnbalancedBranchProbability.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | 4 | def unbalancedBranchProbability(): 5 | if random.random() > 0.75: 6 | print(True) # 25% probability 7 | else: 8 | print(False) # 75% probability 9 | -------------------------------------------------------------------------------- /marker/js-marker/src/main/kotlin/spp/jetbrains/marker/js/detect/JavascriptEndpointDetector.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.js.detect 18 | 19 | import com.intellij.openapi.project.Project 20 | import spp.jetbrains.marker.js.detect.endpoint.ExpressEndpoint 21 | import spp.jetbrains.marker.source.info.EndpointDetector 22 | import spp.jetbrains.marker.source.info.EndpointDetector.EndpointNameDetector 23 | 24 | /** 25 | * todo: description. 26 | * 27 | * @since 0.7.0 28 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 29 | */ 30 | class JavascriptEndpointDetector(project: Project) : EndpointDetector(project) { 31 | 32 | override val detectorSet: Set = setOf( 33 | ExpressEndpoint() 34 | ) 35 | } 36 | -------------------------------------------------------------------------------- /marker/js-marker/src/main/kotlin/spp/jetbrains/marker/js/detect/JavascriptLoggerDetector.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.js.detect 18 | 19 | import com.intellij.openapi.project.Project 20 | import spp.jetbrains.marker.source.info.LoggerDetector 21 | import spp.jetbrains.marker.source.mark.guide.MethodGuideMark 22 | 23 | class JavascriptLoggerDetector(val project: Project) : LoggerDetector { 24 | 25 | override suspend fun determineLoggerStatements(guideMark: MethodGuideMark): List { 26 | return emptyList() 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /marker/js-marker/src/main/kotlin/spp/jetbrains/marker/js/model/JavascriptBlockArtifact.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.js.model 18 | 19 | import com.intellij.psi.PsiElement 20 | import spp.jetbrains.artifact.model.BlockArtifact 21 | 22 | class JavascriptBlockArtifact(psiElement: PsiElement) : BlockArtifact(psiElement) { 23 | 24 | override fun clone(): JavascriptBlockArtifact { 25 | return JavascriptBlockArtifact(psiElement) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /marker/js-marker/src/main/kotlin/spp/jetbrains/marker/js/model/JavascriptFunctionArtifact.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.js.model 18 | 19 | import com.intellij.lang.javascript.psi.JSFunction 20 | import com.intellij.psi.PsiElement 21 | import spp.jetbrains.artifact.model.BlockArtifact 22 | import spp.jetbrains.artifact.model.FunctionArtifact 23 | import spp.jetbrains.artifact.service.toArtifact 24 | 25 | class JavascriptFunctionArtifact(override val psiElement: JSFunction) : FunctionArtifact(psiElement) { 26 | 27 | override val bodyBlock: BlockArtifact? 28 | get() = psiElement.block?.toArtifact() as? BlockArtifact 29 | 30 | override fun getAnnotations(): List { 31 | return emptyList() 32 | } 33 | 34 | override fun clone(): JavascriptFunctionArtifact { 35 | return JavascriptFunctionArtifact(psiElement) 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /marker/js-marker/src/main/kotlin/spp/jetbrains/marker/js/model/JavascriptIfArtifact.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.js.model 18 | 19 | import com.intellij.lang.javascript.psi.JSIfStatement 20 | import spp.jetbrains.artifact.model.ArtifactElement 21 | import spp.jetbrains.artifact.model.IfArtifact 22 | import spp.jetbrains.artifact.service.toArtifact 23 | 24 | class JavascriptIfArtifact(override val psiElement: JSIfStatement) : IfArtifact(psiElement) { 25 | 26 | override val condition: ArtifactElement? 27 | get() = psiElement.condition?.toArtifact() 28 | 29 | override val thenBranch: ArtifactElement? 30 | get() = psiElement.thenBranch?.toArtifact() 31 | 32 | override val elseBranch: ArtifactElement? 33 | get() = psiElement.elseBranch?.toArtifact() 34 | 35 | override fun clone(): JavascriptIfArtifact { 36 | return JavascriptIfArtifact(psiElement) 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /marker/js-marker/src/main/kotlin/spp/jetbrains/marker/js/model/JavascriptLiteralValue.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.js.model 18 | 19 | import com.intellij.psi.PsiLiteralValue 20 | import spp.jetbrains.artifact.model.ArtifactLiteralValue 21 | 22 | class JavascriptLiteralValue(override val psiElement: PsiLiteralValue) : ArtifactLiteralValue(psiElement) { 23 | override val value: Any? 24 | get() = psiElement.value 25 | 26 | override fun clone(): JavascriptLiteralValue { 27 | return JavascriptLiteralValue(psiElement) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /marker/js-marker/src/main/kotlin/spp/jetbrains/marker/js/service/JavascriptArtifactConditionService.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.js.service 18 | 19 | import com.intellij.psi.PsiElement 20 | import spp.jetbrains.marker.service.define.IArtifactConditionService 21 | 22 | /** 23 | * Used to parse/format Javascript instrument conditions. 24 | * 25 | * @since 0.7.0 26 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 27 | */ 28 | class JavascriptArtifactConditionService : IArtifactConditionService { 29 | 30 | override fun getCondition(condition: String, context: PsiElement): String { 31 | return condition 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /marker/js-marker/src/main/resources/META-INF/services/spp.jetbrains.marker.LanguageProvider: -------------------------------------------------------------------------------- 1 | spp.jetbrains.marker.js.JavascriptLanguageProvider -------------------------------------------------------------------------------- /marker/js-marker/src/test/testData/endpoint/express/ExpressAllRouter.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const app = express(); 3 | 4 | const testEndpoint = require('./all-endpoint'); 5 | app.use('/test', testEndpoint); 6 | app.use('/test2', testEndpoint); 7 | -------------------------------------------------------------------------------- /marker/js-marker/src/test/testData/endpoint/express/ExpressDirectRouter.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const app = express(); 3 | 4 | app.use('/test', require('./test-endpoint')); 5 | -------------------------------------------------------------------------------- /marker/js-marker/src/test/testData/endpoint/express/ExpressMultipleRouter.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const app = express(); 3 | 4 | const testEndpoint = require('./test-endpoint'); 5 | app.use('/test', testEndpoint); 6 | app.use('/test2', testEndpoint); 7 | -------------------------------------------------------------------------------- /marker/js-marker/src/test/testData/endpoint/express/ExpressVariableRouter.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const app = express(); 3 | 4 | const testEndpoint = require('./test-endpoint'); 5 | app.use('/test', testEndpoint); 6 | -------------------------------------------------------------------------------- /marker/js-marker/src/test/testData/endpoint/express/all-endpoint.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const router = express.Router(); 3 | 4 | router.all('/hello-world', (req, res) => { 5 | res.sendStatus(200); 6 | }); 7 | 8 | module.exports = router; 9 | -------------------------------------------------------------------------------- /marker/js-marker/src/test/testData/endpoint/express/test-endpoint.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const router = express.Router(); 3 | 4 | router.get('/hello-world', (req, res) => { 5 | res.sendStatus(200); 6 | }); 7 | 8 | module.exports = router; 9 | -------------------------------------------------------------------------------- /marker/js-marker/src/test/testData/scope/CalledFunctions.js: -------------------------------------------------------------------------------- 1 | function callerFunction() { 2 | directCalledFunction(); 3 | } 4 | 5 | function directCalledFunction() { 6 | indirectCalledFunction(); 7 | } 8 | 9 | function indirectCalledFunction() { 10 | console.log(true); 11 | } -------------------------------------------------------------------------------- /marker/js-marker/src/test/testData/scope/CallerFunctions.js: -------------------------------------------------------------------------------- 1 | function callerFunction() { 2 | directCalledFunction(); 3 | } 4 | 5 | function directCalledFunction() { 6 | indirectCalledFunction(); 7 | } 8 | 9 | function indirectCalledFunction() { 10 | console.log(true); 11 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/main/kotlin/spp/jetbrains/marker/jvm/model/JVMBlockArtifact.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.jvm.model 18 | 19 | import com.intellij.psi.PsiElement 20 | import spp.jetbrains.artifact.model.BlockArtifact 21 | 22 | class JVMBlockArtifact(psiElement: PsiElement) : BlockArtifact(psiElement) { 23 | 24 | override fun clone(): JVMBlockArtifact { 25 | return JVMBlockArtifact(psiElement) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /marker/jvm-marker/src/main/resources/META-INF/services/spp.jetbrains.marker.LanguageProvider: -------------------------------------------------------------------------------- 1 | spp.jetbrains.marker.jvm.JVMLanguageProvider -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/field/field-and-function/FieldAndFunction.groovy: -------------------------------------------------------------------------------- 1 | class FieldAndFunction { 2 | def foo = 42 3 | 4 | def add(int x, int y) { 5 | def result = x + y 6 | println "Adding $x and $y gives $result" 7 | return result 8 | } 9 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/field/field-and-function/FieldAndFunction.java: -------------------------------------------------------------------------------- 1 | public class FieldAndFunction { 2 | int foo = 42; 3 | 4 | public int add(int x, int y) { 5 | int result = x + y; 6 | System.out.println("Adding " + x + " and " + y + " gives " + result); 7 | return result; 8 | } 9 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/field/field-and-function/FieldAndFunction.kt: -------------------------------------------------------------------------------- 1 | class FieldAndFunction { 2 | val foo = 42 3 | fun add(x: Int, y: Int): Int { 4 | val result = x + y 5 | println("Adding $x and $y gives $result") 6 | return result 7 | } 8 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/field/single-field/SingleField.groovy: -------------------------------------------------------------------------------- 1 | class SingleField { 2 | public def foo = 42 3 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/field/single-field/SingleField.java: -------------------------------------------------------------------------------- 1 | public class SingleField { 2 | public int foo = 42; 3 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/field/single-field/SingleField.kt: -------------------------------------------------------------------------------- 1 | class SingleField { 2 | val foo = 42 3 | } 4 | -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/jvmGuide/GroovyMethod.groovy: -------------------------------------------------------------------------------- 1 | class GroovyMethod { 2 | void foo() { 3 | } 4 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/jvmGuide/JavaMethod.java: -------------------------------------------------------------------------------- 1 | public class JavaMethod { 2 | public void foo() { 3 | } 4 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/jvmGuide/KotlinMethod.kt: -------------------------------------------------------------------------------- 1 | class KotlinMethod { 2 | fun foo() { 3 | } 4 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/class-name/ClassName.groovy: -------------------------------------------------------------------------------- 1 | class ClassName { 2 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/class-name/ClassName.java: -------------------------------------------------------------------------------- 1 | public class ClassName { 2 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/class-name/ClassName.kt: -------------------------------------------------------------------------------- 1 | class ClassName { 2 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/class-variable/ClassVariable.groovy: -------------------------------------------------------------------------------- 1 | class ClassVariable { 2 | int id = 1 3 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/class-variable/ClassVariable.java: -------------------------------------------------------------------------------- 1 | public class ClassVariable { 2 | int id = 1; 3 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/class-variable/ClassVariable.kt: -------------------------------------------------------------------------------- 1 | class ClassVariable { 2 | val id = 1 3 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/expect-open-class-name/ExpectOpenClassName.kt: -------------------------------------------------------------------------------- 1 | public expect open class ExpectOpenClassName : Throwable { 2 | constructor() 3 | constructor(message: String?) 4 | constructor(message: String?, cause: Throwable?) 5 | constructor(cause: Throwable?) 6 | } 7 | -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/inner-class-method-name/InnerClassMethodName.groovy: -------------------------------------------------------------------------------- 1 | class InnerClassMethodName { 2 | class ClassName { 3 | void foo() { 4 | } 5 | } 6 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/inner-class-method-name/InnerClassMethodName.java: -------------------------------------------------------------------------------- 1 | public class InnerClassMethodName { 2 | public class ClassName { 3 | public void foo() { 4 | } 5 | } 6 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/inner-class-method-name/InnerClassMethodName.kt: -------------------------------------------------------------------------------- 1 | class InnerClassMethodName { 2 | inner class ClassName { 3 | fun foo() { 4 | } 5 | } 6 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/inner-class-method-variable/InnerClassMethodVariable.groovy: -------------------------------------------------------------------------------- 1 | class InnerClassMethodVariable { 2 | class ClassName { 3 | void foo() { 4 | int id = 1 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/inner-class-method-variable/InnerClassMethodVariable.java: -------------------------------------------------------------------------------- 1 | public class InnerClassMethodVariable { 2 | public class ClassName { 3 | public void foo() { 4 | int id = 1; 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/inner-class-method-variable/InnerClassMethodVariable.kt: -------------------------------------------------------------------------------- 1 | class InnerClassMethodVariable { 2 | inner class ClassName { 3 | fun foo() { 4 | val id = 1 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/inner-class-name/InnerClassName.groovy: -------------------------------------------------------------------------------- 1 | class InnerClassName { 2 | class ClassName { 3 | } 4 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/inner-class-name/InnerClassName.java: -------------------------------------------------------------------------------- 1 | public class InnerClassName { 2 | public class ClassName { 3 | } 4 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/inner-class-name/InnerClassName.kt: -------------------------------------------------------------------------------- 1 | class InnerClassName { 2 | inner class ClassName { 3 | } 4 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/inner-class-variable/InnerClassVariable.groovy: -------------------------------------------------------------------------------- 1 | class InnerClassVariable { 2 | class ClassName { 3 | int id = 1 4 | } 5 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/inner-class-variable/InnerClassVariable.java: -------------------------------------------------------------------------------- 1 | public class InnerClassVariable { 2 | public class ClassName { 3 | int id = 1; 4 | } 5 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/inner-class-variable/InnerClassVariable.kt: -------------------------------------------------------------------------------- 1 | class InnerClassVariable { 2 | inner class ClassName { 3 | val id = 1 4 | } 5 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/method-name/MethodName.groovy: -------------------------------------------------------------------------------- 1 | class MethodName { 2 | void foo1() { 3 | } 4 | 5 | void foo2(String string) { 6 | } 7 | 8 | void foo3( 9 | String string, 10 | int integer, 11 | long Long, 12 | double Double, 13 | float Float, 14 | boolean Boolean, 15 | char Char, 16 | byte Byte, 17 | short Short 18 | ) { 19 | } 20 | 21 | void foo4(MyObject myObject) { 22 | } 23 | 24 | class MyObject {} 25 | 26 | void foo5( 27 | String[] Strings, 28 | int[] Integers, 29 | long[] Longs, 30 | double[] Doubles, 31 | float[] Floats, 32 | boolean[] Booleans, 33 | char[] Chars, 34 | byte[] Bytes, 35 | short[] Shorts 36 | ) { 37 | } 38 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/method-name/MethodName.java: -------------------------------------------------------------------------------- 1 | public class MethodName { 2 | public void foo1() { 3 | } 4 | 5 | public void foo2(String string) { 6 | } 7 | 8 | public void foo3( 9 | String string, 10 | int integer, 11 | long Long, 12 | double Double, 13 | float Float, 14 | boolean Boolean, 15 | char Char, 16 | byte Byte, 17 | short Short 18 | ) { 19 | } 20 | 21 | public void foo4(MyObject myObject) { 22 | } 23 | 24 | class MyObject { 25 | } 26 | 27 | public void foo5( 28 | String[] Strings, 29 | int[] Integers, 30 | long[] Longs, 31 | double[] Doubles, 32 | float[] Floats, 33 | boolean[] Booleans, 34 | char[] Chars, 35 | byte[] Bytes, 36 | short[] Shorts 37 | ) { 38 | } 39 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/method-name/MethodName.kt: -------------------------------------------------------------------------------- 1 | class MethodName { 2 | fun foo1() { 3 | } 4 | 5 | fun foo2(string: String) { 6 | } 7 | 8 | fun foo3( 9 | string: String, 10 | int: Int, 11 | long: Long, 12 | double: Double, 13 | float: Float, 14 | boolean: Boolean, 15 | char: Char, 16 | byte: Byte, 17 | short: Short 18 | ) { 19 | } 20 | 21 | fun foo4(myObject: MyObject) { 22 | } 23 | 24 | class MyObject {} 25 | 26 | fun foo5( 27 | strings: Array, 28 | ints: IntArray, 29 | longs: LongArray, 30 | doubles: DoubleArray, 31 | floats: FloatArray, 32 | booleans: BooleanArray, 33 | chars: CharArray, 34 | bytes: ByteArray, 35 | shorts: ShortArray 36 | ) { 37 | } 38 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/method-variable/MethodVariable.groovy: -------------------------------------------------------------------------------- 1 | class MethodVariable { 2 | void foo() { 3 | int id = 1 4 | } 5 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/method-variable/MethodVariable.java: -------------------------------------------------------------------------------- 1 | public class MethodVariable { 2 | public void foo() { 3 | int id = 1; 4 | } 5 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/method-variable/MethodVariable.kt: -------------------------------------------------------------------------------- 1 | class MethodVariable { 2 | fun foo() { 3 | val id = 1 4 | } 5 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/package-class-name/PackageClassName.groovy: -------------------------------------------------------------------------------- 1 | package com.example 2 | 3 | class PackageClassName { 4 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/package-class-name/PackageClassName.java: -------------------------------------------------------------------------------- 1 | package com.example; 2 | 3 | public class PackageClassName { 4 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/package-class-name/PackageClassName.kt: -------------------------------------------------------------------------------- 1 | package com.example 2 | 3 | class PackageClassName { 4 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/package-inner-class-name/PackageInnerClassName.groovy: -------------------------------------------------------------------------------- 1 | package com.example 2 | 3 | class PackageInnerClassName { 4 | class ClassName { 5 | } 6 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/package-inner-class-name/PackageInnerClassName.java: -------------------------------------------------------------------------------- 1 | package com.example; 2 | 3 | public class PackageInnerClassName { 4 | class ClassName { 5 | } 6 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/package-inner-class-name/PackageInnerClassName.kt: -------------------------------------------------------------------------------- 1 | package com.example 2 | 3 | class PackageInnerClassName { 4 | class ClassName { 5 | } 6 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/package-method-name/PackageMethodName.groovy: -------------------------------------------------------------------------------- 1 | package com.example 2 | 3 | class PackageMethodName { 4 | void foo1() { 5 | } 6 | 7 | void foo2(String string) { 8 | } 9 | 10 | void foo3( 11 | String string, 12 | int integer, 13 | long Long, 14 | double Double, 15 | float Float, 16 | boolean Boolean, 17 | char Char, 18 | byte Byte, 19 | short Short 20 | ) { 21 | } 22 | 23 | void foo4(MyObject myObject) { 24 | } 25 | 26 | class MyObject {} 27 | 28 | void foo5( 29 | String[] Strings, 30 | int[] Integers, 31 | long[] Longs, 32 | double[] Doubles, 33 | float[] Floats, 34 | boolean[] Booleans, 35 | char[] Chars, 36 | byte[] Bytes, 37 | short[] Shorts 38 | ) { 39 | } 40 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/package-method-name/PackageMethodName.java: -------------------------------------------------------------------------------- 1 | package com.example; 2 | 3 | public class PackageMethodName { 4 | public void foo1() { 5 | } 6 | 7 | public void foo2(String string) { 8 | } 9 | 10 | public void foo3( 11 | String string, 12 | int integer, 13 | long Long, 14 | double Double, 15 | float Float, 16 | boolean Boolean, 17 | char Char, 18 | byte Byte, 19 | short Short 20 | ) { 21 | } 22 | 23 | public void foo4(MyObject myObject) { 24 | } 25 | 26 | class MyObject { 27 | } 28 | 29 | public void foo5( 30 | String[] Strings, 31 | int[] Integers, 32 | long[] Longs, 33 | double[] Doubles, 34 | float[] Floats, 35 | boolean[] Booleans, 36 | char[] Chars, 37 | byte[] Bytes, 38 | short[] Shorts 39 | ) { 40 | } 41 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/naming/package-method-name/PackageMethodName.kt: -------------------------------------------------------------------------------- 1 | package com.example 2 | 3 | class PackageMethodName { 4 | fun foo1() { 5 | } 6 | 7 | fun foo2(string: String) { 8 | } 9 | 10 | fun foo3( 11 | string: String, 12 | int: Int, 13 | long: Long, 14 | double: Double, 15 | float: Float, 16 | boolean: Boolean, 17 | char: Char, 18 | byte: Byte, 19 | short: Short 20 | ) { 21 | } 22 | 23 | fun foo4(myObject: MyObject) { 24 | } 25 | 26 | class MyObject {} 27 | 28 | fun foo5( 29 | strings: Array, 30 | ints: IntArray, 31 | longs: LongArray, 32 | doubles: DoubleArray, 33 | floats: FloatArray, 34 | booleans: BooleanArray, 35 | chars: CharArray, 36 | bytes: ByteArray, 37 | shorts: ShortArray 38 | ) { 39 | } 40 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/scope/CalledFunctions.groovy: -------------------------------------------------------------------------------- 1 | class CalledFunctions { 2 | private void callerFunction() { 3 | directCalledFunction() 4 | } 5 | 6 | private void directCalledFunction() { 7 | indirectCalledFunction() 8 | } 9 | 10 | private void indirectCalledFunction() { 11 | println(true) 12 | } 13 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/scope/CalledFunctions.java: -------------------------------------------------------------------------------- 1 | private class CalledFunctions { 2 | private void callerFunction() { 3 | directCalledFunction(); 4 | } 5 | 6 | private void directCalledFunction() { 7 | indirectCalledFunction(); 8 | } 9 | 10 | private void indirectCalledFunction() { 11 | System.out.println(true); 12 | } 13 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/scope/CalledFunctions.kt: -------------------------------------------------------------------------------- 1 | private class CalledFunctions { 2 | private fun callerFunction() { 3 | directCalledFunction() 4 | } 5 | 6 | private fun directCalledFunction() { 7 | indirectCalledFunction() 8 | } 9 | 10 | private fun indirectCalledFunction() { 11 | println(true) 12 | } 13 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/scope/CallerFunctions.groovy: -------------------------------------------------------------------------------- 1 | class CallerFunctions { 2 | private void callerFunction() { 3 | directCalledFunction() 4 | } 5 | 6 | private void directCalledFunction() { 7 | indirectCalledFunction() 8 | } 9 | 10 | private void indirectCalledFunction() { 11 | println(true) 12 | } 13 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/scope/CallerFunctions.java: -------------------------------------------------------------------------------- 1 | private class CallerFunctions { 2 | private void callerFunction() { 3 | directCalledFunction(); 4 | } 5 | 6 | private void directCalledFunction() { 7 | indirectCalledFunction(); 8 | } 9 | 10 | private void indirectCalledFunction() { 11 | System.out.println(true); 12 | } 13 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/scope/CallerFunctions.kt: -------------------------------------------------------------------------------- 1 | private class CallerFunctions { 2 | private fun callerFunction() { 3 | directCalledFunction() 4 | } 5 | 6 | private fun directCalledFunction() { 7 | indirectCalledFunction() 8 | } 9 | 10 | private fun indirectCalledFunction() { 11 | println(true) 12 | } 13 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/scope/GetFunctionsOnInnerClass.groovy: -------------------------------------------------------------------------------- 1 | class GetFunctionsInnerClass { 2 | private void function1() { 3 | } 4 | 5 | class InnerClass { 6 | private void function2() { 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/scope/GetFunctionsOnInnerClass.java: -------------------------------------------------------------------------------- 1 | private class GetFunctionsInnerClass { 2 | private void function1() { 3 | } 4 | 5 | class InnerClass { 6 | private void function2() { 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/scope/GetFunctionsOnInnerClass.kt: -------------------------------------------------------------------------------- 1 | class GetFunctionsInnerClass { 2 | fun function1() { 3 | } 4 | 5 | class InnerClass { 6 | fun function2() { 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/scope/VariableScope.groovy: -------------------------------------------------------------------------------- 1 | class VariableScope { 2 | private void variableScope() { 3 | def i = 1 4 | def c = 'h' 5 | def s = "hi" 6 | def f = 1.0f 7 | } 8 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/scope/VariableScope.java: -------------------------------------------------------------------------------- 1 | private class VariableScope { 2 | private void variableScope() { 3 | int i = 1; 4 | char c = 'h'; 5 | String s = "hi"; 6 | float f = 1.0f; 7 | } 8 | } -------------------------------------------------------------------------------- /marker/jvm-marker/src/test/testData/scope/VariableScope.kt: -------------------------------------------------------------------------------- 1 | private class VariableScope { 2 | private fun variableScope() { 3 | val i = 1 4 | val c = 'h' 5 | val s = "hi" 6 | val f = 1.0f 7 | } 8 | } -------------------------------------------------------------------------------- /marker/py-marker/src/main/kotlin/spp/jetbrains/marker/py/detect/PythonEndpointDetector.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.py.detect 18 | 19 | import com.intellij.openapi.project.Project 20 | import spp.jetbrains.marker.py.detect.endpoint.FlaskEndpoint 21 | import spp.jetbrains.marker.source.info.EndpointDetector 22 | import spp.jetbrains.marker.source.info.EndpointDetector.EndpointNameDetector 23 | 24 | /** 25 | * todo: description. 26 | * 27 | * @since 0.5.5 28 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 29 | */ 30 | class PythonEndpointDetector(project: Project) : EndpointDetector(project) { 31 | 32 | override val detectorSet: Set = setOf( 33 | FlaskEndpoint() 34 | ) 35 | } 36 | -------------------------------------------------------------------------------- /marker/py-marker/src/main/kotlin/spp/jetbrains/marker/py/detect/PythonLoggerDetector.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.py.detect 18 | 19 | import com.intellij.openapi.project.Project 20 | import spp.jetbrains.marker.source.info.LoggerDetector 21 | import spp.jetbrains.marker.source.mark.guide.MethodGuideMark 22 | 23 | /** 24 | * todo: description. 25 | * 26 | * @since 0.7.0 27 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 28 | */ 29 | class PythonLoggerDetector(project: Project) : LoggerDetector { 30 | 31 | override suspend fun determineLoggerStatements(guideMark: MethodGuideMark): List { 32 | return emptyList() 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /marker/py-marker/src/main/kotlin/spp/jetbrains/marker/py/model/PythonBlockArtifact.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.py.model 18 | 19 | import com.intellij.psi.PsiElement 20 | import spp.jetbrains.artifact.model.BlockArtifact 21 | 22 | class PythonBlockArtifact(psiElement: PsiElement) : BlockArtifact(psiElement) { 23 | 24 | override fun clone(): PythonBlockArtifact { 25 | return PythonBlockArtifact(psiElement) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /marker/py-marker/src/main/kotlin/spp/jetbrains/marker/py/model/PythonFunctionArtifact.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.py.model 18 | 19 | import com.intellij.psi.PsiElement 20 | import com.jetbrains.python.psi.PyFunction 21 | import spp.jetbrains.artifact.model.BlockArtifact 22 | import spp.jetbrains.artifact.model.FunctionArtifact 23 | import spp.jetbrains.artifact.service.toArtifact 24 | 25 | class PythonFunctionArtifact(override val psiElement: PyFunction) : FunctionArtifact(psiElement) { 26 | 27 | override val bodyBlock: BlockArtifact? 28 | get() = psiElement.statementList.toArtifact() as? BlockArtifact 29 | 30 | override fun getAnnotations(): List { 31 | return emptyList() 32 | } 33 | 34 | override fun clone(): PythonFunctionArtifact { 35 | return PythonFunctionArtifact(psiElement) 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /marker/py-marker/src/main/kotlin/spp/jetbrains/marker/py/service/PythonArtifactConditionService.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.py.service 18 | 19 | import com.intellij.psi.PsiElement 20 | import spp.jetbrains.marker.service.define.IArtifactConditionService 21 | 22 | /** 23 | * Used to parse/format Python instrument conditions. 24 | * 25 | * @since 0.4.0 26 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 27 | */ 28 | class PythonArtifactConditionService : IArtifactConditionService { 29 | 30 | override fun getCondition(condition: String, context: PsiElement): String { 31 | return condition 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /marker/py-marker/src/main/resources/META-INF/services/spp.jetbrains.marker.LanguageProvider: -------------------------------------------------------------------------------- 1 | spp.jetbrains.marker.py.PythonLanguageProvider -------------------------------------------------------------------------------- /marker/py-marker/src/test/testData/pythonGuide/PythonMethod.py: -------------------------------------------------------------------------------- 1 | def foo(): 2 | pass 3 | -------------------------------------------------------------------------------- /marker/py-marker/src/test/testData/scope/CalledFunctions.py: -------------------------------------------------------------------------------- 1 | def callerFunction(): 2 | directCalledFunction() 3 | 4 | 5 | def directCalledFunction(): 6 | indirectCalledFunction() 7 | 8 | 9 | def indirectCalledFunction(): 10 | print(True) 11 | -------------------------------------------------------------------------------- /marker/py-marker/src/test/testData/scope/CallerFunctions.py: -------------------------------------------------------------------------------- 1 | def callerFunction(): 2 | directCalledFunction() 3 | 4 | 5 | def directCalledFunction(): 6 | indirectCalledFunction() 7 | 8 | 9 | def indirectCalledFunction(): 10 | print(True) 11 | -------------------------------------------------------------------------------- /marker/rs-marker/src/main/kotlin/spp/jetbrains/marker/rs/model/RustIfArtifact.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.rs.model 18 | 19 | import org.rust.lang.core.psi.RsIfExpr 20 | import spp.jetbrains.artifact.model.ArtifactElement 21 | import spp.jetbrains.artifact.model.IfArtifact 22 | import spp.jetbrains.artifact.service.toArtifact 23 | 24 | class RustIfArtifact(override val psiElement: RsIfExpr) : IfArtifact(psiElement) { 25 | 26 | override val condition: ArtifactElement? 27 | get() = psiElement.condition.toArtifact() 28 | 29 | override val thenBranch: ArtifactElement? 30 | get() = null 31 | 32 | override val elseBranch: ArtifactElement? 33 | get() = psiElement.elseBranch?.toArtifact() 34 | 35 | override fun clone(): RustIfArtifact { 36 | return RustIfArtifact(psiElement) 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /marker/rs-marker/src/main/kotlin/spp/jetbrains/marker/rs/service/RustArtifactModelService.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.rs.service 18 | 19 | import com.intellij.psi.PsiElement 20 | import org.rust.lang.core.psi.RsIfExpr 21 | import spp.jetbrains.artifact.model.ArtifactElement 22 | import spp.jetbrains.artifact.service.define.IArtifactModelService 23 | import spp.jetbrains.marker.rs.model.RustIfArtifact 24 | 25 | /** 26 | * Provides language-agnostic artifact model service for Rust. 27 | * 28 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 29 | */ 30 | class RustArtifactModelService : IArtifactModelService { 31 | 32 | override fun toArtifact(element: PsiElement): ArtifactElement? { 33 | return when (element) { 34 | is RsIfExpr -> RustIfArtifact(element) 35 | else -> null 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /marker/rs-marker/src/main/resources/META-INF/services/spp.jetbrains.marker.LanguageProvider: -------------------------------------------------------------------------------- 1 | spp.jetbrains.marker.rs.RustLanguageProvider -------------------------------------------------------------------------------- /marker/src/main/kotlin/spp/jetbrains/marker/UltimateProvider.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker 18 | 19 | import com.intellij.openapi.project.Project 20 | import spp.jetbrains.marker.source.info.EndpointDetector 21 | 22 | interface UltimateProvider { 23 | 24 | fun getEndpointDetectors(project: Project): List> 25 | } 26 | -------------------------------------------------------------------------------- /marker/src/main/kotlin/spp/jetbrains/marker/command/LiveCommandContext.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.command 18 | 19 | import com.intellij.psi.PsiElement 20 | import spp.jetbrains.marker.source.SourceFileMarker 21 | import spp.jetbrains.marker.source.mark.guide.GuideMark 22 | import spp.protocol.artifact.ArtifactQualifiedName 23 | import java.io.File 24 | 25 | data class LiveCommandContext( 26 | val args: List, 27 | val sourceFile: File, 28 | val lineNumber: Int, 29 | val artifactQualifiedName: ArtifactQualifiedName, 30 | val fileMarker: SourceFileMarker, 31 | val guideMark: GuideMark? = null, 32 | val psiElement: PsiElement, 33 | val variableName: String? = null 34 | ) 35 | -------------------------------------------------------------------------------- /marker/src/main/kotlin/spp/jetbrains/marker/service/define/AbstractSourceGuideProvider.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.service.define 18 | 19 | import spp.jetbrains.artifact.service.define.ISourceMarkerService 20 | import spp.jetbrains.marker.source.SourceFileMarker 21 | 22 | /** 23 | * todo: description. 24 | * 25 | * @since 0.5.5 26 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 27 | */ 28 | interface AbstractSourceGuideProvider : ISourceMarkerService { 29 | 30 | fun determineGuideMarks(fileMarker: SourceFileMarker) 31 | } 32 | -------------------------------------------------------------------------------- /marker/src/main/kotlin/spp/jetbrains/marker/service/define/IArtifactConditionService.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.service.define 18 | 19 | import com.intellij.openapi.util.TextRange 20 | import com.intellij.psi.PsiElement 21 | import spp.jetbrains.artifact.service.define.ISourceMarkerService 22 | 23 | /** 24 | * Used to parse/format instrument conditions. 25 | * 26 | * @since 0.3.0 27 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 28 | */ 29 | interface IArtifactConditionService : ISourceMarkerService { 30 | 31 | data class ParseRange( 32 | val textRange: TextRange, 33 | val variable: PsiElement 34 | ) 35 | 36 | fun getCondition(condition: String, context: PsiElement): String 37 | } 38 | -------------------------------------------------------------------------------- /marker/src/main/kotlin/spp/jetbrains/marker/source/SourceFileMarkerProvider.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.source 18 | 19 | import com.intellij.psi.PsiFile 20 | 21 | /** 22 | * Returns a [SourceFileMarker] given a [PsiFile]. 23 | * 24 | * @since 0.1.0 25 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 26 | */ 27 | interface SourceFileMarkerProvider { 28 | 29 | fun createSourceFileMarker(psiFile: PsiFile): SourceFileMarker { 30 | return SourceFileMarker(psiFile) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /marker/src/main/kotlin/spp/jetbrains/marker/source/mark/api/SourceMarkProvider.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.source.mark.api 18 | 19 | import com.intellij.psi.PsiElement 20 | import com.intellij.psi.PsiNameIdentifierOwner 21 | 22 | /** 23 | * Returns a [SourceMark] given a PSI element. 24 | * 25 | * @since 0.1.0 26 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 27 | */ 28 | interface SourceMarkProvider { 29 | 30 | fun createExpressionSourceMark( 31 | psiExpression: PsiElement, 32 | type: SourceMark.Type 33 | ): ExpressionSourceMark 34 | 35 | fun createMethodSourceMark( 36 | psiMethod: PsiNameIdentifierOwner, 37 | type: SourceMark.Type 38 | ): MethodSourceMark 39 | 40 | fun createClassSourceMark( 41 | psiClass: PsiNameIdentifierOwner, 42 | type: SourceMark.Type 43 | ): ClassSourceMark 44 | } 45 | -------------------------------------------------------------------------------- /marker/src/main/kotlin/spp/jetbrains/marker/source/mark/api/component/api/SourceMarkComponent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.source.mark.api.component.api 18 | 19 | import spp.jetbrains.marker.source.mark.api.component.api.config.SourceMarkComponentConfiguration 20 | import javax.swing.JComponent 21 | 22 | /** 23 | * todo: description. 24 | * 25 | * @since 0.1.0 26 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 27 | */ 28 | interface SourceMarkComponent { 29 | 30 | val configuration: SourceMarkComponentConfiguration 31 | 32 | fun getComponent(): JComponent 33 | fun dispose() 34 | } 35 | -------------------------------------------------------------------------------- /marker/src/main/kotlin/spp/jetbrains/marker/source/mark/api/component/api/SourceMarkComponentProvider.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.source.mark.api.component.api 18 | 19 | import spp.jetbrains.marker.source.mark.api.SourceMark 20 | import spp.jetbrains.marker.source.mark.api.component.api.config.SourceMarkComponentConfiguration 21 | 22 | /** 23 | * Used to configure, display, and dispose [SourceMark] components. 24 | * 25 | * @since 0.1.0 26 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 27 | */ 28 | interface SourceMarkComponentProvider { 29 | 30 | val defaultConfiguration: SourceMarkComponentConfiguration 31 | 32 | fun getComponent(sourceMark: SourceMark): SourceMarkComponent 33 | fun disposeComponent(sourceMark: SourceMark) 34 | } 35 | -------------------------------------------------------------------------------- /marker/src/main/kotlin/spp/jetbrains/marker/source/mark/api/config/SourceMarkConfiguration.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.source.mark.api.config 18 | 19 | import spp.jetbrains.marker.source.mark.api.SourceMark 20 | import spp.jetbrains.marker.source.mark.api.component.api.SourceMarkComponentProvider 21 | 22 | /** 23 | * Used to configure [SourceMark]s. 24 | * 25 | * @since 0.1.0 26 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 27 | */ 28 | interface SourceMarkConfiguration { 29 | var activateOnKeyboardShortcut: Boolean 30 | var componentProvider: SourceMarkComponentProvider 31 | } 32 | -------------------------------------------------------------------------------- /marker/src/main/kotlin/spp/jetbrains/marker/source/mark/api/event/SourceMarkEventListener.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.source.mark.api.event 18 | 19 | import spp.jetbrains.marker.source.mark.api.SourceMark 20 | 21 | /** 22 | * Used to listen for events produced by [SourceMark]s. 23 | * 24 | * @since 0.1.0 25 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 26 | */ 27 | fun interface SourceMarkEventListener { 28 | fun handleEvent(event: SourceMarkEvent) 29 | } 30 | -------------------------------------------------------------------------------- /marker/src/main/kotlin/spp/jetbrains/marker/source/mark/api/event/SynchronousSourceMarkEventListener.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.source.mark.api.event 18 | 19 | import spp.jetbrains.marker.source.mark.api.SourceMark 20 | 21 | /** 22 | * Used to listen for events produced by [SourceMark]s. 23 | * Calls handleEvent synchronously. 24 | * 25 | * @since 0.2.1 26 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 27 | */ 28 | fun interface SynchronousSourceMarkEventListener : SourceMarkEventListener { 29 | override fun handleEvent(event: SourceMarkEvent) 30 | } 31 | -------------------------------------------------------------------------------- /marker/src/main/kotlin/spp/jetbrains/marker/source/mark/gutter/event/GutterMarkEventCode.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.source.mark.gutter.event 18 | 19 | import spp.jetbrains.marker.source.mark.api.event.IEventCode 20 | import spp.jetbrains.marker.source.mark.gutter.GutterMark 21 | 22 | /** 23 | * Represents [GutterMark]-specific events. 24 | * 25 | * @since 0.1.0 26 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 27 | */ 28 | @Suppress("MagicNumber") 29 | enum class GutterMarkEventCode(private val code: Int) : IEventCode { 30 | GUTTER_MARK_VISIBLE(2000), 31 | GUTTER_MARK_HIDDEN(2001); 32 | 33 | override fun code(): Int { 34 | return this.code 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /marker/src/main/kotlin/spp/jetbrains/marker/source/mark/inlay/event/InlayMarkEventCode.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.source.mark.inlay.event 18 | 19 | import spp.jetbrains.marker.source.mark.api.event.IEventCode 20 | import spp.jetbrains.marker.source.mark.inlay.InlayMark 21 | 22 | /** 23 | * Represents [InlayMark]-specific events. 24 | * 25 | * @since 0.1.0 26 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 27 | */ 28 | @Suppress("MagicNumber") 29 | enum class InlayMarkEventCode(private val code: Int) : IEventCode { 30 | INLAY_MARK_VISIBLE(3000), 31 | INLAY_MARK_HIDDEN(3001), 32 | VIRTUAL_TEXT_UPDATED(3002); 33 | 34 | override fun code(): Int { 35 | return this.code 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /marker/ult-marker/src/main/kotlin/spp/jetbrains/marker/ult/UltimateMarkerProvider.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.marker.ult 18 | 19 | import com.intellij.openapi.project.Project 20 | import spp.jetbrains.marker.UltimateProvider 21 | import spp.jetbrains.marker.source.info.EndpointDetector 22 | import spp.jetbrains.marker.ult.endpoint.UrlResolverEndpointDetector 23 | 24 | /** 25 | * Source++ extensions for IntelliJ Ultimate. 26 | * 27 | * @since 0.7.2 28 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 29 | */ 30 | class UltimateMarkerProvider : UltimateProvider { 31 | 32 | override fun getEndpointDetectors(project: Project): List> { 33 | return if (UrlResolverEndpointDetector.isAvailable()) { 34 | listOf(UrlResolverEndpointDetector(project)) 35 | } else { 36 | emptyList() 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /marker/ult-marker/src/main/resources/META-INF/services/spp.jetbrains.marker.UltimateProvider: -------------------------------------------------------------------------------- 1 | spp.jetbrains.marker.ult.UltimateMarkerProvider -------------------------------------------------------------------------------- /plugin/src/main/kotlin/spp/jetbrains/sourcemarker/action/DisableSourceAction.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.sourcemarker.action 18 | 19 | import com.intellij.openapi.actionSystem.AnAction 20 | import com.intellij.openapi.actionSystem.AnActionEvent 21 | import spp.jetbrains.status.SourceStatus.Disabled 22 | import spp.jetbrains.status.SourceStatusService 23 | 24 | class DisableSourceAction : AnAction() { 25 | override fun actionPerformed(e: AnActionEvent) { 26 | e.project?.let { 27 | SourceStatusService.getInstance(it).update(Disabled) 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /plugin/src/main/kotlin/spp/jetbrains/sourcemarker/action/EnableSourceAction.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.sourcemarker.action 18 | 19 | import com.intellij.openapi.actionSystem.AnAction 20 | import com.intellij.openapi.actionSystem.AnActionEvent 21 | import spp.jetbrains.status.SourceStatus.Enabled 22 | import spp.jetbrains.status.SourceStatusService 23 | 24 | class EnableSourceAction : AnAction() { 25 | override fun actionPerformed(e: AnActionEvent) { 26 | e.project?.let { 27 | SourceStatusService.getInstance(it).update(Enabled) 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /plugin/src/main/kotlin/spp/jetbrains/sourcemarker/command/status/ui/element/AutocompleteRow.jfd: -------------------------------------------------------------------------------- 1 | JFDML JFormDesigner: "7.0.4.0.360" Java: "11.0.11" encoding: "UTF-8" 2 | 3 | new FormModel { 4 | contentType: "form/swing" 5 | root: new FormRoot { 6 | add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { 7 | "$layoutConstraints": "hidemode 3" 8 | "$columnConstraints": "7[grow,fill]" 9 | "$rowConstraints": "2[]2[]2" 10 | } ) { 11 | name: "this" 12 | "background": new java.awt.Color( 37, 37, 37, 255 ) 13 | "maximumSize": new java.awt.Dimension( 2147483647, 38 ) 14 | add( new FormComponent( "com.intellij.ui.components.JBLabel" ) { 15 | name: "commandLabel" 16 | "text": "" 17 | "foreground": new java.awt.Color( 152, 118, 170, 255 ) 18 | "font": new java.awt.Font( "Roboto Light", 1, 14 ) 19 | }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { 20 | "value": "cell 0 0" 21 | } ) 22 | add( new FormComponent( "com.intellij.ui.components.JBLabel" ) { 23 | name: "descriptionLabel" 24 | "text": "" 25 | "foreground": sfield java.awt.Color gray 26 | }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { 27 | "value": "cell 0 1" 28 | } ) 29 | }, new FormLayoutConstraints( null ) { 30 | "location": new java.awt.Point( 0, 0 ) 31 | "size": new java.awt.Dimension( 400, 45 ) 32 | } ) 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /plugin/src/main/kotlin/spp/jetbrains/sourcemarker/command/ui/util/LiveCommandFieldRow.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.sourcemarker.command.ui.util 18 | 19 | import spp.jetbrains.marker.command.LiveCommand 20 | import spp.jetbrains.marker.command.LiveLocationContext 21 | import spp.jetbrains.sourcemarker.command.util.AutocompleteFieldRow 22 | import javax.swing.Icon 23 | 24 | class LiveCommandFieldRow( 25 | val liveCommand: LiveCommand, 26 | private val context: LiveLocationContext 27 | ) : AutocompleteFieldRow { 28 | override fun getText(): String = liveCommand.getTriggerName() 29 | override fun getDescription(): String = liveCommand.getDescription(context) 30 | override fun getSelectedIcon(): Icon? = liveCommand.selectedIcon 31 | override fun getUnselectedIcon(): Icon? = liveCommand.unselectedIcon 32 | } 33 | -------------------------------------------------------------------------------- /plugin/src/main/kotlin/spp/jetbrains/sourcemarker/command/util/AutocompleteFieldRow.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.sourcemarker.command.util 18 | 19 | import javax.swing.Icon 20 | 21 | /** 22 | * todo: description. 23 | * 24 | * @since 0.3.0 25 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 26 | */ 27 | interface AutocompleteFieldRow { 28 | fun getText(): String 29 | fun getDescription(): String? 30 | fun getSelectedIcon(): Icon? 31 | fun getUnselectedIcon(): Icon? 32 | } 33 | -------------------------------------------------------------------------------- /plugin/src/main/kotlin/spp/jetbrains/sourcemarker/config/PortalConfig.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.sourcemarker.config 18 | 19 | data class PortalConfig( 20 | val zoomLevel: Double = 1.0 21 | ) 22 | -------------------------------------------------------------------------------- /plugin/src/main/kotlin/spp/jetbrains/sourcemarker/instrument/breakpoint/model/ActiveStackTrace.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.sourcemarker.instrument.breakpoint.model 18 | 19 | import spp.protocol.artifact.exception.LiveStackTrace 20 | import spp.protocol.artifact.exception.LiveStackTraceElement 21 | 22 | /** 23 | * The currently selected [LiveStackTrace]. 24 | * 25 | * @since 0.3.0 26 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 27 | */ 28 | data class ActiveStackTrace( 29 | val stackTrace: LiveStackTrace, 30 | var currentFrame: LiveStackTraceElement? = null, 31 | var currentFrameIndex: Int = 0 32 | ) 33 | -------------------------------------------------------------------------------- /plugin/src/main/kotlin/spp/jetbrains/sourcemarker/instrument/breakpoint/model/ActiveStackTraceListener.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.sourcemarker.instrument.breakpoint.model 18 | 19 | /** 20 | * todo: description. 21 | * 22 | * @since 0.3.0 23 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 24 | */ 25 | interface ActiveStackTraceListener { 26 | fun onChanged(activeStackTrace: ActiveStackTrace) 27 | } 28 | -------------------------------------------------------------------------------- /plugin/src/main/kotlin/spp/jetbrains/sourcemarker/instrument/breakpoint/tree/VariableSimpleTreeStructure.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.sourcemarker.instrument.breakpoint.tree 18 | 19 | import com.intellij.ui.treeStructure.SimpleTreeStructure 20 | import spp.jetbrains.sourcemarker.instrument.breakpoint.model.ActiveStackTrace 21 | 22 | /** 23 | * todo: description. 24 | * 25 | * @since 0.3.0 26 | * @author [Brandon Fergerson](mailto:bfergerson@apache.org) 27 | */ 28 | class VariableSimpleTreeStructure : SimpleTreeStructure() { 29 | 30 | private val simpleRoot = VariableRootSimpleNode() 31 | 32 | override fun getRootElement(): VariableRootSimpleNode { 33 | return simpleRoot 34 | } 35 | 36 | fun setActiveStackFrame(activeStack: ActiveStackTrace) { 37 | simpleRoot.setActiveStackTrace(activeStack) 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /plugin/src/main/kotlin/spp/jetbrains/sourcemarker/status/SourceWidgetFactory.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Source++, the continuous feedback platform for developers. 3 | * Copyright (C) 2022-2024 CodeBrig, Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package spp.jetbrains.sourcemarker.status 18 | 19 | import com.intellij.openapi.project.Project 20 | import com.intellij.openapi.wm.StatusBarWidget 21 | import com.intellij.openapi.wm.impl.status.widget.StatusBarEditorBasedWidgetFactory 22 | 23 | class SourceWidgetFactory : StatusBarEditorBasedWidgetFactory() { 24 | 25 | override fun getId(): String = "spp.jetbrains.sourcemarker" 26 | override fun getDisplayName(): String = "Source++" 27 | 28 | override fun createWidget(project: Project): StatusBarWidget { 29 | return SourceStatusBarWidget(project) 30 | } 31 | 32 | override fun disposeWidget(widget: StatusBarWidget) = Unit 33 | } 34 | -------------------------------------------------------------------------------- /plugin/src/main/resources/META-INF/pluginIcon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /plugin/src/main/resources/META-INF/pluginIcon_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /plugin/src/main/resources/META-INF/services/io.vertx.servicediscovery.spi.ServiceDiscoveryBackend: -------------------------------------------------------------------------------- 1 | spp.jetbrains.sourcemarker.discover.TCPServiceDiscoveryBackend -------------------------------------------------------------------------------- /plugin/src/main/resources/META-INF/withGroovy.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /plugin/src/main/resources/META-INF/withJava.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /plugin/src/main/resources/META-INF/withJavascript.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /plugin/src/main/resources/META-INF/withJavascriptDebugger.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /plugin/src/main/resources/META-INF/withKotlin.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 9 | 10 | -------------------------------------------------------------------------------- /plugin/src/main/resources/META-INF/withPython.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /plugin/src/main/resources/META-INF/withRust.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/fonts/Roboto-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sourceplusplus/interface-jetbrains/199006a410529d961dc184f0740a5d845bd87899/plugin/src/main/resources/fonts/Roboto-Light.ttf -------------------------------------------------------------------------------- /plugin/src/main/resources/fonts/Roboto-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sourceplusplus/interface-jetbrains/199006a410529d961dc184f0740a5d845bd87899/plugin/src/main/resources/fonts/Roboto-Regular.ttf -------------------------------------------------------------------------------- /plugin/src/main/resources/fonts/chinese.msyh.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sourceplusplus/interface-jetbrains/199006a410529d961dc184f0740a5d845bd87899/plugin/src/main/resources/fonts/chinese.msyh.ttf -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/angle-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/angle-down_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/breakpoint-config.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/breakpoint-config_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/breakpoint/live-breakpoint-active.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/breakpoint/live-breakpoint-complete.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/breakpoint/live-breakpoint-error.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/breakpoint/live-breakpoint-foreign.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/chart-mixed.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/check.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/clock-rotate-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/clock.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/clock_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/closeHovered.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/closeHovered_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/closePressed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/closePressed_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/close_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/command/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/count.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/count_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/expand.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/expandHovered.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/expandHovered_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/expandPressed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/expandPressed_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/expand_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/eye-slash.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/eye-slash_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/gauge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/histogram.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/instrument/live-log/live-log-active.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/instrument/live-log/live-log-active_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/instrument/live-log/live-log-foreign.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/instrument/live-log/live-log-foreign_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/instrument/overview/plug-circle-bolt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 9 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/instrument/overview/plug-circle-check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 9 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/instrument/overview/plug-circle-exclamation.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 9 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/instrument/overview/plug-circle-xmark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 9 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/log-config.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/log-config_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/meter-config.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/meter-config_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/minimize.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/minimizeHovered.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/minimizeHovered_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/minimizePressed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/minimizePressed_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/minimize_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/play.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/rotate.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/span-config.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/span-config_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/square-check.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/square-dashed.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/statusBar/status-disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/statusBar/status-disabled_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/statusBar/status-enabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/statusBar/status-enabled_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/statusBar/status-failed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/statusBar/status-failed_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/statusBar/status-pending.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/statusBar/status-pending_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/stop.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/tool-window/chart-area.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/tool-window/chart-area_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/tool-window/list-tree.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/tool-window/list-tree_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/tool-window/memo.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/tool-window/memo_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/tool-window/satellite-dish.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/tool-window/satellite-dish_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/trash-can.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 9 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/trash-list.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 9 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/trash.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 9 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/triangle-exclamation.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/user.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/xmark-large.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /plugin/src/main/resources/icons/xmark.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "config:base" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | plugins { 3 | String kotlinVersion = "1.8.22" 4 | id 'org.jetbrains.kotlin.jvm' version kotlinVersion apply false 5 | id 'com.avast.gradle.docker-compose' version "0.17.4" apply false 6 | id 'io.gitlab.arturbosch.detekt' version "1.23.0" apply false 7 | id 'com.apollographql.apollo3' version "3.8.2" apply false 8 | id 'com.diffplug.spotless' version '6.20.0' apply false 9 | } 10 | } 11 | 12 | include 'commander' 13 | include 'commander:kotlin-compiler-wrapper' 14 | include 'core' 15 | include 'insight' 16 | include 'marker' 17 | include 'marker:js-marker' 18 | include 'marker:jvm-marker' 19 | include 'marker:py-marker' 20 | include 'marker:rs-marker' 21 | include 'marker:ult-marker' 22 | include 'plugin' 23 | --------------------------------------------------------------------------------