From 74a04726f40720550b9b6020117cc1fc1f04cb54 Mon Sep 17 00:00:00 2001 From: Dominik Helm Date: Tue, 21 Oct 2025 16:28:48 +0200 Subject: [PATCH] Remove Dependency Extraction and Architecture Validation subprojects --- OPAL/ProjectDependencies.mmd | 5 - OPAL/ProjectDependencies.pdf | Bin 30495 -> 27580 bytes OPAL/ProjectDependencies.svg | 2 +- OPAL/av/Readme.md | 3 - OPAL/av/build.sbt | 1 - .../av/viz/DependencyAnalysis.html.template | 187 - .../av/checking/AnnotationsPredicate.scala | 83 - .../av/checking/ArchitectureChecker.scala | 48 - .../opalj/av/checking/ClassLevelMatcher.scala | 20 - .../org/opalj/av/checking/MethodMatcher.scala | 92 - .../opalj/av/checking/MethodPredicate.scala | 47 - .../org/opalj/av/checking/NamePredicate.scala | 48 - .../av/checking/NoSourceElementsMatcher.scala | 20 - .../opalj/av/checking/PackageMatcher.scala | 79 - .../av/checking/SourceElementsMatcher.scala | 42 - .../av/checking/SpecificationError.scala | 11 - .../scala/org/opalj/av/checking/package.scala | 16 - .../main/scala/org/opalj/av/viz/Icicle.css | 79 - .../opalj/av/viz/InstructionStatistics.html | 71 - .../viz/InstructionStatistics.html.template | 0 .../main/scala/org/opalj/av/viz/JDK8data.js | 5861 ----------------- .../src/main/scala/org/opalj/av/viz/base.css | 123 - .../src/main/scala/org/opalj/av/viz/data.js | 439 -- .../src/main/scala/org/opalj/av/viz/jit-yc.js | 23 - .../test/resources/InvalidClasspathFile.txt | 1 - .../src/test/resources/ValidClasspathFile.txt | 1 - .../src/test/resources/classfiles/entity.jar | Bin 6358 -> 0 bytes .../test/resources/classfiles/mathematics.jar | Bin 5867 -> 0 bytes .../sourcefiles/entity/AbstractEntity.scala | 8 - .../sourcefiles/entity/annotation/Column.java | 21 - .../sourcefiles/entity/annotation/Entity.java | 17 - .../sourcefiles/entity/annotation/Id.java | 19 - .../sourcefiles/entity/annotation/Table.java | 19 - .../entity/annotation/Transient.java | 17 - .../sourcefiles/mathematics/Example.scala | 10 - .../sourcefiles/mathematics/Mathematics.scala | 18 - .../sourcefiles/mathematics/Number.scala | 26 - .../sourcefiles/mathematics/Operations.scala | 18 - .../sourcefiles/mathematics/Rational.scala | 31 - .../ArchitectureConsistencyTest.scala | 344 - .../opalj/av/checking/ClasspathFileTest.scala | 86 - .../org/opalj/av/checking/MatcherTest.scala | 548 -- OPAL/de/Readme.md | 2 - OPAL/de/build.sbt | 1 - ...ependencyCountingDependencyProcessor.scala | 83 - .../opalj/de/DependencyProcessorAdapter.scala | 35 - .../de/DependencyProcessorDecorator.scala | 45 - .../org/opalj/de/DependencyStoreKey.scala | 23 - ...dencyStoreWithoutSelfDependenciesKey.scala | 30 - .../scala/org/opalj/de/DependencyTypes.scala | 137 - .../src/main/scala/org/opalj/de/package.scala | 16 - .../classfiles/invokedynamic_dependencies.jar | Bin 2559 -> 0 bytes .../dependencies/SameClassDependencies.groovy | 17 - .../opalj/de/DependenciesOnTypesTest.scala | 161 - .../opalj/de/DependencyExtractorsHelper.scala | 94 - ...xtractDependenciesFromClassFilesTest.scala | 42 - README.markdown | 6 +- build.sbt | 28 - 58 files changed, 2 insertions(+), 9202 deletions(-) delete mode 100644 OPAL/av/Readme.md delete mode 100644 OPAL/av/build.sbt delete mode 100644 OPAL/av/src/main/resources/org/opalj/av/viz/DependencyAnalysis.html.template delete mode 100644 OPAL/av/src/main/scala/org/opalj/av/checking/AnnotationsPredicate.scala delete mode 100644 OPAL/av/src/main/scala/org/opalj/av/checking/ArchitectureChecker.scala delete mode 100644 OPAL/av/src/main/scala/org/opalj/av/checking/ClassLevelMatcher.scala delete mode 100644 OPAL/av/src/main/scala/org/opalj/av/checking/MethodMatcher.scala delete mode 100644 OPAL/av/src/main/scala/org/opalj/av/checking/MethodPredicate.scala delete mode 100644 OPAL/av/src/main/scala/org/opalj/av/checking/NamePredicate.scala delete mode 100644 OPAL/av/src/main/scala/org/opalj/av/checking/NoSourceElementsMatcher.scala delete mode 100644 OPAL/av/src/main/scala/org/opalj/av/checking/PackageMatcher.scala delete mode 100644 OPAL/av/src/main/scala/org/opalj/av/checking/SourceElementsMatcher.scala delete mode 100644 OPAL/av/src/main/scala/org/opalj/av/checking/SpecificationError.scala delete mode 100644 OPAL/av/src/main/scala/org/opalj/av/checking/package.scala delete mode 100644 OPAL/av/src/main/scala/org/opalj/av/viz/Icicle.css delete mode 100644 OPAL/av/src/main/scala/org/opalj/av/viz/InstructionStatistics.html delete mode 100644 OPAL/av/src/main/scala/org/opalj/av/viz/InstructionStatistics.html.template delete mode 100644 OPAL/av/src/main/scala/org/opalj/av/viz/JDK8data.js delete mode 100644 OPAL/av/src/main/scala/org/opalj/av/viz/base.css delete mode 100644 OPAL/av/src/main/scala/org/opalj/av/viz/data.js delete mode 100644 OPAL/av/src/main/scala/org/opalj/av/viz/jit-yc.js delete mode 100644 OPAL/av/src/test/resources/InvalidClasspathFile.txt delete mode 100644 OPAL/av/src/test/resources/ValidClasspathFile.txt delete mode 100644 OPAL/av/src/test/resources/classfiles/entity.jar delete mode 100644 OPAL/av/src/test/resources/classfiles/mathematics.jar delete mode 100644 OPAL/av/src/test/resources/sourcefiles/entity/AbstractEntity.scala delete mode 100644 OPAL/av/src/test/resources/sourcefiles/entity/annotation/Column.java delete mode 100644 OPAL/av/src/test/resources/sourcefiles/entity/annotation/Entity.java delete mode 100644 OPAL/av/src/test/resources/sourcefiles/entity/annotation/Id.java delete mode 100644 OPAL/av/src/test/resources/sourcefiles/entity/annotation/Table.java delete mode 100644 OPAL/av/src/test/resources/sourcefiles/entity/annotation/Transient.java delete mode 100644 OPAL/av/src/test/resources/sourcefiles/mathematics/Example.scala delete mode 100644 OPAL/av/src/test/resources/sourcefiles/mathematics/Mathematics.scala delete mode 100644 OPAL/av/src/test/resources/sourcefiles/mathematics/Number.scala delete mode 100644 OPAL/av/src/test/resources/sourcefiles/mathematics/Operations.scala delete mode 100644 OPAL/av/src/test/resources/sourcefiles/mathematics/Rational.scala delete mode 100644 OPAL/av/src/test/scala/org/opalj/av/checking/ArchitectureConsistencyTest.scala delete mode 100644 OPAL/av/src/test/scala/org/opalj/av/checking/ClasspathFileTest.scala delete mode 100644 OPAL/av/src/test/scala/org/opalj/av/checking/MatcherTest.scala delete mode 100644 OPAL/de/Readme.md delete mode 100644 OPAL/de/build.sbt delete mode 100644 OPAL/de/src/main/scala/org/opalj/de/DependencyCountingDependencyProcessor.scala delete mode 100644 OPAL/de/src/main/scala/org/opalj/de/DependencyProcessorAdapter.scala delete mode 100644 OPAL/de/src/main/scala/org/opalj/de/DependencyProcessorDecorator.scala delete mode 100644 OPAL/de/src/main/scala/org/opalj/de/DependencyStoreKey.scala delete mode 100644 OPAL/de/src/main/scala/org/opalj/de/DependencyStoreWithoutSelfDependenciesKey.scala delete mode 100644 OPAL/de/src/main/scala/org/opalj/de/DependencyTypes.scala delete mode 100644 OPAL/de/src/main/scala/org/opalj/de/package.scala delete mode 100644 OPAL/de/src/test/resources/classfiles/invokedynamic_dependencies.jar delete mode 100644 OPAL/de/src/test/resources/sourcefiles/dependencies/SameClassDependencies.groovy delete mode 100644 OPAL/de/src/test/scala/org/opalj/de/DependenciesOnTypesTest.scala delete mode 100644 OPAL/de/src/test/scala/org/opalj/de/DependencyExtractorsHelper.scala delete mode 100644 OPAL/de/src/test/scala/org/opalj/de/ExtractDependenciesFromClassFilesTest.scala diff --git a/OPAL/ProjectDependencies.mmd b/OPAL/ProjectDependencies.mmd index 5fb11b0b22..6b9923e5af 100644 --- a/OPAL/ProjectDependencies.mmd +++ b/OPAL/ProjectDependencies.mmd @@ -3,7 +3,6 @@ flowchart BT Framework[Framework
framework] ThreeAddressCode[Three Address Code
tac] APK[APK
apk] - DependenciesExtractionLibrary[Dependencies Extraction Library
de] IDE[IDE
ide] BytecodeInfrastructure[Bytecode Infrastructure
bi] AbstractInterpretationFramework[Abstract Interpretation Framework
ai] @@ -15,7 +14,6 @@ flowchart BT IFDS[IFDS
ifds] BytecodeRepresentation[Bytecode Representation
br] BytecodeAssembler[Bytecode Assembler
ba] - ArchitectureValidation[Architecture Validation
av] Demos[Demos
demos] BytecodeCreator[Bytecode Creator
bc] @@ -24,12 +22,10 @@ flowchart BT style Hermes fill:#ffd7cf Framework --> BytecodeAssembler - Framework --> ArchitectureValidation Framework --> ThreeAddressCode ThreeAddressCode --> AbstractInterpretationFramework ThreeAddressCode --> IFDS APK --> ThreeAddressCode - DependenciesExtractionLibrary --> AbstractInterpretationFramework IDE --> StaticAnalysisInfrastructure IDE --> BytecodeRepresentation BytecodeInfrastructure --> Common @@ -43,6 +39,5 @@ flowchart BT BytecodeRepresentation --> BytecodeInfrastructure BytecodeAssembler --> BytecodeCreator BytecodeAssembler --> AbstractInterpretationFramework - ArchitectureValidation --> DependenciesExtractionLibrary Demos --> Framework BytecodeCreator --> BytecodeDisassembler diff --git a/OPAL/ProjectDependencies.pdf b/OPAL/ProjectDependencies.pdf index d8cc210f68d6f3752c14f82c3ab588ffc080476e..56bd5f76ecac94b5c98adb0924c3bfbf7ebebc86 100644 GIT binary patch literal 27580 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 DW{W}; diff --git a/OPAL/ProjectDependencies.svg b/OPAL/ProjectDependencies.svg index 0244c94178..501ad513c9 100644 --- a/OPAL/ProjectDependencies.svg +++ b/OPAL/ProjectDependencies.svg @@ -1 +1 @@ -

Framework
framework

Three Address Code
tac

APK
apk

Dependencies Extraction Library
de

IDE
ide

Bytecode Infrastructure
bi

Abstract Interpretation Framework
ai

Hermes
hermes

Configuration Explorer
ce

Common
common

Bytecode Disassembler
da

Static Analysis Infrastructure
si

IFDS
ifds

Bytecode Representation
br

Bytecode Assembler
ba

Architecture Validation
av

Demos
demos

Bytecode Creator
bc

\ No newline at end of file +

Framework
framework

Three Address Code
tac

APK
apk

IDE
ide

Bytecode Infrastructure
bi

Abstract Interpretation Framework
ai

Hermes
hermes

Configuration Explorer
ce

Common
common

Bytecode Disassembler
da

Static Analysis Infrastructure
si

IFDS
ifds

Bytecode Representation
br

Bytecode Assembler
ba

Demos
demos

Bytecode Creator
bc

\ No newline at end of file diff --git a/OPAL/av/Readme.md b/OPAL/av/Readme.md deleted file mode 100644 index 49706dff72..0000000000 --- a/OPAL/av/Readme.md +++ /dev/null @@ -1,3 +0,0 @@ -# Overview -The ***Architecture Validation*** (AV) Project builds upon the **Dependency Extraction** (DE) library and can be used to check an application's implemented architecture against a specification of the architecture. - diff --git a/OPAL/av/build.sbt b/OPAL/av/build.sbt deleted file mode 100644 index b511e98651..0000000000 --- a/OPAL/av/build.sbt +++ /dev/null @@ -1 +0,0 @@ -// build settings reside in the opal root build.sbt file diff --git a/OPAL/av/src/main/resources/org/opalj/av/viz/DependencyAnalysis.html.template b/OPAL/av/src/main/resources/org/opalj/av/viz/DependencyAnalysis.html.template deleted file mode 100644 index 7729d18352..0000000000 --- a/OPAL/av/src/main/resources/org/opalj/av/viz/DependencyAnalysis.html.template +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - - - - -
- - - - diff --git a/OPAL/av/src/main/scala/org/opalj/av/checking/AnnotationsPredicate.scala b/OPAL/av/src/main/scala/org/opalj/av/checking/AnnotationsPredicate.scala deleted file mode 100644 index 47013e1e2b..0000000000 --- a/OPAL/av/src/main/scala/org/opalj/av/checking/AnnotationsPredicate.scala +++ /dev/null @@ -1,83 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj -package av -package checking - -import scala.collection.Set - -import org.opalj.br.* - -/** - * @author Marco Torsello - */ -trait AnnotationsPredicate extends (Iterable[Annotation] => Boolean) - -/** - * @author Marco Torsello - */ -case object NoAnnotations extends AnnotationsPredicate { - - def apply(others: Iterable[Annotation]): Boolean = false - -} - -/** - * @author Michael Eichberg - */ -case object AnyAnnotations extends AnnotationsPredicate { - - def apply(others: Iterable[Annotation]): Boolean = true - -} - -/** - * @author Marco Torsello - */ -case class HasAtLeastTheAnnotations( - annotationPredicates: Set[? <: AnnotationPredicate] -) extends AnnotationsPredicate { - - def apply(others: Iterable[Annotation]): Boolean = { - annotationPredicates.forall(p => others.exists(a => p(a))) - } -} - -object HasAtLeastTheAnnotations { - - def apply(annotationPredicate: AnnotationPredicate): HasAtLeastTheAnnotations = { - new HasAtLeastTheAnnotations(Set(annotationPredicate)) - } -} - -/** - * @author Marco Torsello - */ -case class HasTheAnnotations( - annotationPredicates: Set[? <: AnnotationPredicate] -) extends AnnotationsPredicate { - - def apply(others: Iterable[Annotation]): Boolean = { - others.size == annotationPredicates.size && - annotationPredicates.forall(p => others.exists(a => p(a))) - } - -} - -object HasTheAnnotations { - - def apply(annotationPredicate: AnnotationPredicate): HasTheAnnotations = { - new HasTheAnnotations(Set(annotationPredicate)) - } -} - -/** - * @author Marco Torsello - */ -case class HasAtLeastOneAnnotation( - annotationPredicates: Set[? <: AnnotationPredicate] -) extends AnnotationsPredicate { - - def apply(annotations: Iterable[Annotation]): Boolean = { - annotationPredicates.exists(p => annotations.exists(a => p(a))) - } -} diff --git a/OPAL/av/src/main/scala/org/opalj/av/checking/ArchitectureChecker.scala b/OPAL/av/src/main/scala/org/opalj/av/checking/ArchitectureChecker.scala deleted file mode 100644 index dd79afd5a7..0000000000 --- a/OPAL/av/src/main/scala/org/opalj/av/checking/ArchitectureChecker.scala +++ /dev/null @@ -1,48 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj -package av -package checking - -import scala.collection.Set - -/** - * An architecture checker validates if the implemented architecture - * complies with the expected/specified one. - * - * @author Marco Torsello - */ -sealed trait ArchitectureChecker { - - def violations(): Set[SpecificationViolation] - -} - -/** - * A dependency checker validates if the dependencies between the elements of - * two ensembles comply with the expected/specified dependencies. - * - * @author Michael Eichberg - * @author Marco Torsello - */ -trait DependencyChecker extends ArchitectureChecker { - - def targetEnsembles: Seq[Symbol] - - def sourceEnsembles: Seq[Symbol] -} - -/** - * A property checker validates if the elements of an ensemble - * have the expected/specified properties. - * - * @author Marco Torsello - */ -trait PropertyChecker extends ArchitectureChecker { - - /** - * A textual representation of the property. - */ - def property: String - - def ensembles: Seq[Symbol] -} diff --git a/OPAL/av/src/main/scala/org/opalj/av/checking/ClassLevelMatcher.scala b/OPAL/av/src/main/scala/org/opalj/av/checking/ClassLevelMatcher.scala deleted file mode 100644 index b3c2a312b6..0000000000 --- a/OPAL/av/src/main/scala/org/opalj/av/checking/ClassLevelMatcher.scala +++ /dev/null @@ -1,20 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj -package av -package checking - -import org.opalj.br.ClassFile -import org.opalj.br.analyses.SomeProject - -/** - * A class level matcher matches classes and all methods and fields defined by the - * respective classes. - * - * @author Michael Eichberg - * @author Marco Torsello - */ -trait ClassLevelMatcher extends SourceElementsMatcher { - - def doesMatch(classFile: ClassFile)(implicit project: SomeProject): Boolean - -} diff --git a/OPAL/av/src/main/scala/org/opalj/av/checking/MethodMatcher.scala b/OPAL/av/src/main/scala/org/opalj/av/checking/MethodMatcher.scala deleted file mode 100644 index 4927adc943..0000000000 --- a/OPAL/av/src/main/scala/org/opalj/av/checking/MethodMatcher.scala +++ /dev/null @@ -1,92 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj -package av -package checking - -import scala.collection.immutable - -import org.opalj.br.ClassFile -import org.opalj.br.Method -import org.opalj.br.VirtualSourceElement -import org.opalj.br.analyses.SomeProject - -/** - * Matches methods based on their attributes, annotations and class. - * - * @author Marco Torsello - */ -case class MethodMatcher( - classLevelMatcher: ClassLevelMatcher = AllClasses, - annotationsPredicate: AnnotationsPredicate = AnyAnnotations, - methodPredicate: SourceElementPredicate[Method] = AnyMethod -) extends SourceElementsMatcher { - - def doesClassFileMatch(classFile: ClassFile)(implicit project: SomeProject): Boolean = { - classLevelMatcher.doesMatch(classFile) - } - - def doesMethodMatch(method: Method): Boolean = { - annotationsPredicate(method.annotations) && - methodPredicate(method) - } - - def extension(implicit project: SomeProject): immutable.Set[VirtualSourceElement] = { - val allMatchedMethods = project.allClassFiles collect { - case classFile if doesClassFileMatch(classFile) => - classFile.methods collect { - case m if doesMethodMatch(m) => m.asVirtualMethod(classFile.thisType) - } - } - allMatchedMethods.flatten.toSet - } - -} - -/** - * Defines several additional factory methods to facilitate the creation of - * [[MethodMatcher]]s. - * - * @author Marco Torsello - */ -object MethodMatcher { - - def apply(methodPredicate: SourceElementPredicate[? >: Method]): MethodMatcher = { - new MethodMatcher(methodPredicate = methodPredicate) - } - - def apply( - annotationsPredicate: AnnotationsPredicate, - methodPredicate: SourceElementPredicate[? >: Method] - ): MethodMatcher = { - new MethodMatcher(annotationsPredicate = annotationsPredicate, methodPredicate = methodPredicate) - } - - def apply( - classLevelMatcher: ClassLevelMatcher, - methodPredicate: SourceElementPredicate[Method] - ): MethodMatcher = { - new MethodMatcher(classLevelMatcher, methodPredicate = methodPredicate) - } - - def apply( - annotationsPredicate: AnnotationsPredicate - ): MethodMatcher = { - new MethodMatcher(annotationsPredicate = annotationsPredicate) - } - - /** - * Creates a MethodMatcher, that relies on an AllAnnotationsPredicate for matching - * the given AnnotationPredicate. - */ - def apply(annotationPredicate: AnnotationPredicate): MethodMatcher = { - apply(HasAtLeastTheAnnotations(annotationPredicate)) - } - - def apply( - classLevelMatcher: ClassLevelMatcher, - annotationPredicate: AnnotationPredicate - ): MethodMatcher = { - new MethodMatcher(classLevelMatcher, HasAtLeastTheAnnotations(annotationPredicate)) - } - -} diff --git a/OPAL/av/src/main/scala/org/opalj/av/checking/MethodPredicate.scala b/OPAL/av/src/main/scala/org/opalj/av/checking/MethodPredicate.scala deleted file mode 100644 index e40dc1e69b..0000000000 --- a/OPAL/av/src/main/scala/org/opalj/av/checking/MethodPredicate.scala +++ /dev/null @@ -1,47 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj -package av -package checking - -import org.opalj.br.Method -import org.opalj.br.MethodDescriptor - -/** - * @author Marco Torsello - */ -case object AnyMethod extends SourceElementPredicate[Method] { - - override final def apply(method: Method): Boolean = true - - def toDescription: String = "/*any method*/" - -} - -/** - * @author Marco Torsello - */ -case class MethodWithName(name: String) extends SourceElementPredicate[Method] { - - def apply(method: Method): Boolean = { - method.name == name - } - - def toDescription: String = name - -} - -/** - * @author Marco Torsello - */ -case class MethodWithSignature( - name: String, - descriptor: MethodDescriptor -) extends SourceElementPredicate[Method] { - - def apply(method: Method): Boolean = { - method.name == this.name && method.descriptor == this.descriptor - } - - def toDescription: String = descriptor.toJava(name) - -} diff --git a/OPAL/av/src/main/scala/org/opalj/av/checking/NamePredicate.scala b/OPAL/av/src/main/scala/org/opalj/av/checking/NamePredicate.scala deleted file mode 100644 index f00029887c..0000000000 --- a/OPAL/av/src/main/scala/org/opalj/av/checking/NamePredicate.scala +++ /dev/null @@ -1,48 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj -package av -package checking - -import scala.util.matching.Regex - -/** - * Matches a (binary) name of a file, method or class. - * - * @author Michael Eichberg - */ -trait NamePredicate extends (String => Boolean) - -/** - * @author Marco Torsello - * @author Michael Eichberg - */ -case class Equals(name: BinaryString) extends NamePredicate { - - def apply(that: String): Boolean = { - this.name.asString == that - } -} - -/** - * @author Michael Eichberg - */ -case class StartsWith(name: BinaryString) extends NamePredicate { - - def apply(that: String): Boolean = { - that.startsWith(this.name.asString) - } -} - -/** - * Matches name of class, fields and methods based on their name. - * - * '''The name is matched against the binary notation.''' - * - * @author Michael Eichberg - */ -case class RegexNamePredicate(matcher: Regex) extends NamePredicate { - - def apply(otherName: String): Boolean = { - matcher.findFirstIn(otherName).isDefined - } -} diff --git a/OPAL/av/src/main/scala/org/opalj/av/checking/NoSourceElementsMatcher.scala b/OPAL/av/src/main/scala/org/opalj/av/checking/NoSourceElementsMatcher.scala deleted file mode 100644 index f237d8e83b..0000000000 --- a/OPAL/av/src/main/scala/org/opalj/av/checking/NoSourceElementsMatcher.scala +++ /dev/null @@ -1,20 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj -package av -package checking - -import scala.collection.immutable - -import org.opalj.br.VirtualSourceElement -import org.opalj.br.analyses.SomeProject - -/** - * A source element matcher that matches no elements. - * - * @author Michael Eichberg - */ -case object NoSourceElementsMatcher extends SourceElementsMatcher { - - def extension(implicit project: SomeProject): immutable.Set[VirtualSourceElement] = Set.empty - -} diff --git a/OPAL/av/src/main/scala/org/opalj/av/checking/PackageMatcher.scala b/OPAL/av/src/main/scala/org/opalj/av/checking/PackageMatcher.scala deleted file mode 100644 index 80672aaa13..0000000000 --- a/OPAL/av/src/main/scala/org/opalj/av/checking/PackageMatcher.scala +++ /dev/null @@ -1,79 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj -package av -package checking - -import org.opalj.br.* -import org.opalj.br.analyses.SomeProject - -/** - * Matches all classes in the specified package. - * - * @author Marco Torsello - */ -case class PackageMatcher( - namePredicate: NamePredicate, - classMatcher: ClassMatcher -) extends ClassLevelMatcher { - - def doesMatch(classFile: ClassFile)(implicit project: SomeProject): Boolean = { - val packageName = classFile.thisType.packageName - namePredicate(packageName) && - classMatcher.doesMatch(classFile) - } - - def extension(implicit project: SomeProject): Set[VirtualSourceElement] = { - VirtualSourceElement.asVirtualSourceElements( - project.allClassFiles filter { doesMatch(_) }, - classMatcher.matchMethods, - classMatcher.matchFields - ) - } -} - -/** - * Defines several additional factory methods to facilitate the creation of - * [[PackageMatcher]]s. - * - * @author Marco Torsello - */ -object PackageMatcher { - - def apply(namePredicate: NamePredicate): PackageMatcher = { - new PackageMatcher(namePredicate, AllClasses) - } - - /** - * Creates a [[PackageMatcher]], that relies on a [[ClassMatcher]] for matching - * the classType. - * - * @param packageName The name of a package in java notation. - * (I.e., "." are used to separate a package name's segments; e.g., - * `java.lang.Object`). - * @param classMatcher The [[ClassMatcher]], that will be used to match the class. - * @param matchSubpackages If true, all packages, that start with the given package - * name are matched otherwise only classes declared in the given package are matched. - */ - def apply( - packageName: String, - classMatcher: ClassMatcher = AllClasses, - matchSubpackages: Boolean = false - ): PackageMatcher = { - val binaryPackageName = packageName.replace('.', '/') - val namePredicate = - if (matchSubpackages) - StartsWith(binaryPackageName) - else - Equals(binaryPackageName) - - new PackageMatcher(namePredicate, classMatcher) - } - - def apply( - packageName: String, - matchSubpackages: Boolean - ): PackageMatcher = { - apply(packageName, AllClasses, matchSubpackages) - } - -} diff --git a/OPAL/av/src/main/scala/org/opalj/av/checking/SourceElementsMatcher.scala b/OPAL/av/src/main/scala/org/opalj/av/checking/SourceElementsMatcher.scala deleted file mode 100644 index e4a992a4fd..0000000000 --- a/OPAL/av/src/main/scala/org/opalj/av/checking/SourceElementsMatcher.scala +++ /dev/null @@ -1,42 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj -package av -package checking - -import scala.collection.immutable - -import org.opalj.br.* -import org.opalj.br.analyses.SomeProject - -/** - * A source element matcher determines a set of source elements that matches a given query. - * - * @author Michael Eichberg - * @author Marco Torsello - */ -trait SourceElementsMatcher extends (SomeProject => immutable.Set[VirtualSourceElement]) { left => - - final def apply(project: SomeProject): immutable.Set[VirtualSourceElement] = extension(using project) - - def extension(implicit project: SomeProject): immutable.Set[VirtualSourceElement] - - infix def and(right: SourceElementsMatcher): SourceElementsMatcher = { - new SourceElementsMatcher { - def extension(implicit project: SomeProject) = { - left.extension ++ right.extension - } - - override def toString() = s"($left and $right)" - } - } - - infix def except(right: SourceElementsMatcher): SourceElementsMatcher = { - new SourceElementsMatcher { - def extension(implicit project: SomeProject) = { - left.extension -- right.extension - } - - override def toString() = s"($left except $right)" - } - } -} diff --git a/OPAL/av/src/main/scala/org/opalj/av/checking/SpecificationError.scala b/OPAL/av/src/main/scala/org/opalj/av/checking/SpecificationError.scala deleted file mode 100644 index ff037de053..0000000000 --- a/OPAL/av/src/main/scala/org/opalj/av/checking/SpecificationError.scala +++ /dev/null @@ -1,11 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj -package av -package checking - -/** - * Used to report errors in the specification itself. - * - * @author Michael Eichberg - */ -case class SpecificationError(description: String) extends Exception(description) diff --git a/OPAL/av/src/main/scala/org/opalj/av/checking/package.scala b/OPAL/av/src/main/scala/org/opalj/av/checking/package.scala deleted file mode 100644 index 4fd33f5753..0000000000 --- a/OPAL/av/src/main/scala/org/opalj/av/checking/package.scala +++ /dev/null @@ -1,16 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj -package av - -import scala.language.implicitConversions - -/** - * Helper classes and functionality related to specifying architectural concerns. - * - * @author Michael Eichberg - */ -package object checking { - - implicit def StringToBinaryString(string: String): BinaryString = BinaryString(string) - -} diff --git a/OPAL/av/src/main/scala/org/opalj/av/viz/Icicle.css b/OPAL/av/src/main/scala/org/opalj/av/viz/Icicle.css deleted file mode 100644 index c599d62951..0000000000 --- a/OPAL/av/src/main/scala/org/opalj/av/viz/Icicle.css +++ /dev/null @@ -1,79 +0,0 @@ -#update { - margin:10px 40px; -} - -.button { - display: inline-block; - outline: none; - cursor: pointer; - text-align: center; - text-decoration: none; - font: 14px / 100% Arial, Helvetica, sans-serif; - padding: 0.5em 1em 0.55em; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.3); - -webkit-border-radius: 0.5em; - -moz-border-radius: 0.5em; - border-radius: 0.5em; - -webkit-box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.2); - box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.2); -} - -.button:hover { - text-decoration: none; -} - -.button:active { - position: relative; - top: 1px; -} - -/* white */ -.white { - color: #606060; - border: solid 1px #b7b7b7; - background: #fff; - background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#ededed)); - background: -moz-linear-gradient(top, #fff, #ededed); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#ededed'); -} - -.white:hover { - background: #ededed; - background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#dcdcdc)); - background: -moz-linear-gradient(top, #fff, #dcdcdc); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#dcdcdc'); -} - -.white:active { - color: #999; - background: -webkit-gradient(linear, left top, left bottom, from(#ededed), to(#fff)); - background: -moz-linear-gradient(top, #ededed, #fff); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#ffffff'); -} - - -.tip { - text-align: left; - width:auto; - max-width:500px; -} - -.tip-title { - font-size: 11px; - text-align:center; - margin-bottom:2px; -} - -#right-container { - display: none; -} - -#center-container { - width:800px; -} - -#infovis { - width:800px; -} - diff --git a/OPAL/av/src/main/scala/org/opalj/av/viz/InstructionStatistics.html b/OPAL/av/src/main/scala/org/opalj/av/viz/InstructionStatistics.html deleted file mode 100644 index 5d86850768..0000000000 --- a/OPAL/av/src/main/scala/org/opalj/av/viz/InstructionStatistics.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - -Icicle - Icicle Tree with static JSON data - - - - - - - - - - - - - - - -
- -
- -
- -

- Instructions per Package -

- -
- - -
-
- - -
-
-
- -Go to Parent - -
- -
- -
-
-
- -
- -
- -
- -
-
- - diff --git a/OPAL/av/src/main/scala/org/opalj/av/viz/InstructionStatistics.html.template b/OPAL/av/src/main/scala/org/opalj/av/viz/InstructionStatistics.html.template deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/OPAL/av/src/main/scala/org/opalj/av/viz/JDK8data.js b/OPAL/av/src/main/scala/org/opalj/av/viz/JDK8data.js deleted file mode 100644 index d889eeab84..0000000000 --- a/OPAL/av/src/main/scala/org/opalj/av/viz/JDK8data.js +++ /dev/null @@ -1,5861 +0,0 @@ -var labelType, useGradients, nativeTextSupport, animate; - -(function() { - var ua = navigator.userAgent, - iStuff = ua.match(/iPhone/i) || ua.match(/iPad/i), - typeOfCanvas = typeof HTMLCanvasElement, - nativeCanvasSupport = (typeOfCanvas == 'object' || typeOfCanvas == 'function'), - textSupport = nativeCanvasSupport - && (typeof document.createElement('canvas').getContext('2d').fillText == 'function'); - //I'm setting this based on the fact that ExCanvas provides text support for IE - //and that as of today iPhone/iPad current text support is lame - labelType = (!nativeCanvasSupport || (textSupport && !iStuff))? 'Native' : 'HTML'; - nativeTextSupport = labelType == 'Native'; - useGradients = nativeCanvasSupport; - animate = !(iStuff || !nativeCanvasSupport); -})(); - -var Log = { - elem: false, - write: function(text){ - if (!this.elem) - this.elem = document.getElementById('log'); - this.elem.innerHTML = text; - this.elem.style.left = (700 - this.elem.offsetWidth / 2) + 'px'; - } -}; - - -var icicle; - -function init(){ - //left panel controls - controls(); - - // init data - var json = { - -"id": "", - "name": ":4440230", - "data": { - "$area": 4440230, - "$dim": 4440230, - "$color": "#3030b0" - },"children": [{ -"id": "java", - "name": "java ∑722181 (0)", - "data": { - "$area": 722181, - "$dim": 722181, - "$color": "#8080b0" - },"children": [{ -"id": "java/math", - "name": "math ∑25621 (25621)", - "data": { - "$area": 25621, - "$dim": 25621, - "$color": "#80c080" - }},{ -"id": "java/beans", - "name": "beans ∑20276 (16356)", - "data": { - "$area": 20276, - "$dim": 20276, - "$color": "#80c080" - },"children": [{ -"id": "java/beans/beancontext", - "name": "beancontext ∑3920 (3920)", - "data": { - "$area": 3920, - "$dim": 3920, - "$color": "#80c080" - }}] -},{ -"id": "java/sql", - "name": "sql ∑4291 (4291)", - "data": { - "$area": 4291, - "$dim": 4291, - "$color": "#80c080" - }},{ -"id": "java/security", - "name": "security ∑26457 (18118)", - "data": { - "$area": 26457, - "$dim": 26457, - "$color": "#80c080" - },"children": [{ -"id": "java/security/acl", - "name": "acl ∑9 (9)", - "data": { - "$area": 9, - "$dim": 9, - "$color": "#80c080" - }},{ -"id": "java/security/spec", - "name": "spec ∑1391 (1391)", - "data": { - "$area": 1391, - "$dim": 1391, - "$color": "#80c080" - }},{ -"id": "java/security/cert", - "name": "cert ∑6939 (6939)", - "data": { - "$area": 6939, - "$dim": 6939, - "$color": "#80c080" - }}] -},{ -"id": "java/io", - "name": "io ∑30707 (30707)", - "data": { - "$area": 30707, - "$dim": 30707, - "$color": "#80c080" - }},{ -"id": "java/net", - "name": "net ∑32001 (32001)", - "data": { - "$area": 32001, - "$dim": 32001, - "$color": "#80c080" - }},{ -"id": "java/util", - "name": "util ∑248480 (111833)", - "data": { - "$area": 248480, - "$dim": 248480, - "$color": "#80c080" - },"children": [{ -"id": "java/util/zip", - "name": "zip ∑7610 (7610)", - "data": { - "$area": 7610, - "$dim": 7610, - "$color": "#80c080" - }},{ -"id": "java/util/logging", - "name": "logging ∑8048 (8048)", - "data": { - "$area": 8048, - "$dim": 8048, - "$color": "#80c080" - }},{ -"id": "java/util/prefs", - "name": "prefs ∑7615 (7615)", - "data": { - "$area": 7615, - "$dim": 7615, - "$color": "#80c080" - }},{ -"id": "java/util/stream", - "name": "stream ∑23928 (23928)", - "data": { - "$area": 23928, - "$dim": 23928, - "$color": "#80c080" - }},{ -"id": "java/util/regex", - "name": "regex ∑12944 (12944)", - "data": { - "$area": 12944, - "$dim": 12944, - "$color": "#80c080" - }},{ -"id": "java/util/function", - "name": "function ∑502 (502)", - "data": { - "$area": 502, - "$dim": 502, - "$color": "#80c080" - }},{ -"id": "java/util/concurrent", - "name": "concurrent ∑71038 (57749)", - "data": { - "$area": 71038, - "$dim": 71038, - "$color": "#80c080" - },"children": [{ -"id": "java/util/concurrent/atomic", - "name": "atomic ∑5182 (5182)", - "data": { - "$area": 5182, - "$dim": 5182, - "$color": "#80c080" - }},{ -"id": "java/util/concurrent/locks", - "name": "locks ∑8107 (8107)", - "data": { - "$area": 8107, - "$dim": 8107, - "$color": "#80c080" - }}] -},{ -"id": "java/util/spi", - "name": "spi ∑132 (132)", - "data": { - "$area": 132, - "$dim": 132, - "$color": "#80c080" - }},{ -"id": "java/util/jar", - "name": "jar ∑4830 (4830)", - "data": { - "$area": 4830, - "$dim": 4830, - "$color": "#80c080" - }}] -},{ -"id": "java/rmi", - "name": "rmi ∑3916 (824)", - "data": { - "$area": 3916, - "$dim": 3916, - "$color": "#80c080" - },"children": [{ -"id": "java/rmi/dgc", - "name": "dgc ∑165 (165)", - "data": { - "$area": 165, - "$dim": 165, - "$color": "#80c080" - }},{ -"id": "java/rmi/registry", - "name": "registry ∑84 (84)", - "data": { - "$area": 84, - "$dim": 84, - "$color": "#80c080" - }},{ -"id": "java/rmi/server", - "name": "server ∑1601 (1601)", - "data": { - "$area": 1601, - "$dim": 1601, - "$color": "#80c080" - }},{ -"id": "java/rmi/activation", - "name": "activation ∑1242 (1242)", - "data": { - "$area": 1242, - "$dim": 1242, - "$color": "#80c080" - }}] -},{ -"id": "java/nio", - "name": "nio ∑35362 (24633)", - "data": { - "$area": 35362, - "$dim": 35362, - "$color": "#80c080" - },"children": [{ -"id": "java/nio/file", - "name": "file ∑6065 (3944)", - "data": { - "$area": 6065, - "$dim": 6065, - "$color": "#80c080" - },"children": [{ -"id": "java/nio/file/spi", - "name": "spi ∑290 (290)", - "data": { - "$area": 290, - "$dim": 290, - "$color": "#80c080" - }},{ -"id": "java/nio/file/attribute", - "name": "attribute ∑1831 (1831)", - "data": { - "$area": 1831, - "$dim": 1831, - "$color": "#80c080" - }}] -},{ -"id": "java/nio/charset", - "name": "charset ∑2148 (2135)", - "data": { - "$area": 2148, - "$dim": 2148, - "$color": "#80c080" - },"children": [{ -"id": "java/nio/charset/spi", - "name": "spi ∑13 (13)", - "data": { - "$area": 13, - "$dim": 13, - "$color": "#80c080" - }}] -},{ -"id": "java/nio/channels", - "name": "channels ∑2516 (1483)", - "data": { - "$area": 2516, - "$dim": 2516, - "$color": "#80c080" - },"children": [{ -"id": "java/nio/channels/spi", - "name": "spi ∑1033 (1033)", - "data": { - "$area": 1033, - "$dim": 1033, - "$color": "#80c080" - }}] -}] -},{ -"id": "java/awt", - "name": "awt ∑133544 (79040)", - "data": { - "$area": 133544, - "$dim": 133544, - "$color": "#80c080" - },"children": [{ -"id": "java/awt/dnd", - "name": "dnd ∑3092 (3092)", - "data": { - "$area": 3092, - "$dim": 3092, - "$color": "#80c080" - }},{ -"id": "java/awt/event", - "name": "event ∑4030 (4030)", - "data": { - "$area": 4030, - "$dim": 4030, - "$color": "#80c080" - }},{ -"id": "java/awt/im", - "name": "im ∑148 (148)", - "data": { - "$area": 148, - "$dim": 148, - "$color": "#80c080" - }},{ -"id": "java/awt/print", - "name": "print ∑820 (820)", - "data": { - "$area": 820, - "$dim": 820, - "$color": "#80c080" - }},{ -"id": "java/awt/color", - "name": "color ∑2884 (2884)", - "data": { - "$area": 2884, - "$dim": 2884, - "$color": "#80c080" - }},{ -"id": "java/awt/datatransfer", - "name": "datatransfer ∑4643 (4643)", - "data": { - "$area": 4643, - "$dim": 4643, - "$color": "#80c080" - }},{ -"id": "java/awt/geom", - "name": "geom ∑23512 (23512)", - "data": { - "$area": 23512, - "$dim": 23512, - "$color": "#80c080" - }},{ -"id": "java/awt/font", - "name": "font ∑15375 (15375)", - "data": { - "$area": 15375, - "$dim": 15375, - "$color": "#80c080" - }}] -},{ -"id": "java/time", - "name": "time ∑57883 (17121)", - "data": { - "$area": 57883, - "$dim": 57883, - "$color": "#80c080" - },"children": [{ -"id": "java/time/format", - "name": "format ∑20606 (20606)", - "data": { - "$area": 20606, - "$dim": 20606, - "$color": "#80c080" - }},{ -"id": "java/time/zone", - "name": "zone ∑3340 (3340)", - "data": { - "$area": 3340, - "$dim": 3340, - "$color": "#80c080" - }},{ -"id": "java/time/chrono", - "name": "chrono ∑12164 (12164)", - "data": { - "$area": 12164, - "$dim": 12164, - "$color": "#80c080" - }},{ -"id": "java/time/temporal", - "name": "temporal ∑4652 (4652)", - "data": { - "$area": 4652, - "$dim": 4652, - "$color": "#80c080" - }}] -},{ -"id": "java/applet", - "name": "applet ∑206 (206)", - "data": { - "$area": 206, - "$dim": 206, - "$color": "#80c080" - }},{ -"id": "java/text", - "name": "text ∑24078 (24060)", - "data": { - "$area": 24078, - "$dim": 24078, - "$color": "#80c080" - },"children": [{ -"id": "java/text/spi", - "name": "spi ∑18 (18)", - "data": { - "$area": 18, - "$dim": 18, - "$color": "#80c080" - }}] -},{ -"id": "java/lang", - "name": "lang ∑79359 (47142)", - "data": { - "$area": 79359, - "$dim": 79359, - "$color": "#80c080" - },"children": [{ -"id": "java/lang/ref", - "name": "ref ∑769 (769)", - "data": { - "$area": 769, - "$dim": 769, - "$color": "#80c080" - }},{ -"id": "java/lang/instrument", - "name": "instrument ∑37 (37)", - "data": { - "$area": 37, - "$dim": 37, - "$color": "#80c080" - }},{ -"id": "java/lang/management", - "name": "management ∑2602 (2602)", - "data": { - "$area": 2602, - "$dim": 2602, - "$color": "#80c080" - }},{ -"id": "java/lang/invoke", - "name": "invoke ∑28574 (28574)", - "data": { - "$area": 28574, - "$dim": 28574, - "$color": "#80c080" - }},{ -"id": "java/lang/annotation", - "name": "annotation ∑235 (235)", - "data": { - "$area": 235, - "$dim": 235, - "$color": "#80c080" - }}] -}] -},{ -"id": "javax", - "name": "javax ∑756519 (0)", - "data": { - "$area": 756519, - "$dim": 756519, - "$color": "#8080b0" - },"children": [{ -"id": "javax/transaction", - "name": "transaction ∑34 (21)", - "data": { - "$area": 34, - "$dim": 34, - "$color": "#80c080" - },"children": [{ -"id": "javax/transaction/xa", - "name": "xa ∑13 (13)", - "data": { - "$area": 13, - "$dim": 13, - "$color": "#80c080" - }}] -},{ -"id": "javax/sound/sampled", - "name": "sound.sampled ∑4205 (4041)", - "data": { - "$area": 4205, - "$dim": 4205, - "$color": "#80c080" - },"children": [{ -"id": "javax/sound/sampled/spi", - "name": "spi ∑164 (164)", - "data": { - "$area": 164, - "$dim": 164, - "$color": "#80c080" - }}] -},{ -"id": "javax/net", - "name": "net ∑2349 (126)", - "data": { - "$area": 2349, - "$dim": 2349, - "$color": "#80c080" - },"children": [{ -"id": "javax/net/ssl", - "name": "ssl ∑2223 (2223)", - "data": { - "$area": 2223, - "$dim": 2223, - "$color": "#80c080" - }}] -},{ -"id": "javax/print", - "name": "print ∑11404 (2798)", - "data": { - "$area": 11404, - "$dim": 11404, - "$color": "#80c080" - },"children": [{ -"id": "javax/print/event", - "name": "event ∑68 (68)", - "data": { - "$area": 68, - "$dim": 68, - "$color": "#80c080" - }},{ -"id": "javax/print/attribute", - "name": "attribute ∑8538 (2326)", - "data": { - "$area": 8538, - "$dim": 8538, - "$color": "#80c080" - },"children": [{ -"id": "javax/print/attribute/standard", - "name": "standard ∑6212 (6212)", - "data": { - "$area": 6212, - "$dim": 6212, - "$color": "#80c080" - }}] -}] -},{ -"id": "javax/security/cert", - "name": "security.cert ∑260 (260)", - "data": { - "$area": 260, - "$dim": 260, - "$color": "#80c080" - }},{ -"id": "javax/sound/midi", - "name": "sound.midi ∑2850 (2776)", - "data": { - "$area": 2850, - "$dim": 2850, - "$color": "#80c080" - },"children": [{ -"id": "javax/sound/midi/spi", - "name": "spi ∑74 (74)", - "data": { - "$area": 74, - "$dim": 74, - "$color": "#80c080" - }}] -},{ -"id": "javax/management", - "name": "management ∑76954 (14395)", - "data": { - "$area": 76954, - "$dim": 76954, - "$color": "#80c080" - },"children": [{ -"id": "javax/management/monitor", - "name": "monitor ∑4368 (4368)", - "data": { - "$area": 4368, - "$dim": 4368, - "$color": "#80c080" - }},{ -"id": "javax/management/timer", - "name": "timer ∑1393 (1393)", - "data": { - "$area": 1393, - "$dim": 1393, - "$color": "#80c080" - }},{ -"id": "javax/management/relation", - "name": "relation ∑9815 (9815)", - "data": { - "$area": 9815, - "$dim": 9815, - "$color": "#80c080" - }},{ -"id": "javax/management/openmbean", - "name": "openmbean ∑6572 (6572)", - "data": { - "$area": 6572, - "$dim": 6572, - "$color": "#80c080" - }},{ -"id": "javax/management/modelmbean", - "name": "modelmbean ∑11295 (11295)", - "data": { - "$area": 11295, - "$dim": 11295, - "$color": "#80c080" - }},{ -"id": "javax/management/loading", - "name": "loading ∑2795 (2795)", - "data": { - "$area": 2795, - "$dim": 2795, - "$color": "#80c080" - }},{ -"id": "javax/management/remote", - "name": "remote ∑26321 (2277)", - "data": { - "$area": 26321, - "$dim": 26321, - "$color": "#80c080" - },"children": [{ -"id": "javax/management/remote/rmi", - "name": "rmi ∑24044 (24044)", - "data": { - "$area": 24044, - "$dim": 24044, - "$color": "#80c080" - }}] -}] -},{ -"id": "javax/activity", - "name": "activity ∑51 (51)", - "data": { - "$area": 51, - "$dim": 51, - "$color": "#80c080" - }},{ -"id": "javax/accessibility", - "name": "accessibility ∑2398 (2398)", - "data": { - "$area": 2398, - "$dim": 2398, - "$color": "#80c080" - }},{ -"id": "javax/activation", - "name": "activation ∑3993 (3993)", - "data": { - "$area": 3993, - "$dim": 3993, - "$color": "#80c080" - }},{ -"id": "javax/naming", - "name": "naming ∑10169 (3800)", - "data": { - "$area": 10169, - "$dim": 10169, - "$color": "#80c080" - },"children": [{ -"id": "javax/naming/event", - "name": "event ∑73 (73)", - "data": { - "$area": 73, - "$dim": 73, - "$color": "#80c080" - }},{ -"id": "javax/naming/spi", - "name": "spi ∑1724 (1724)", - "data": { - "$area": 1724, - "$dim": 1724, - "$color": "#80c080" - }},{ -"id": "javax/naming/directory", - "name": "directory ∑1493 (1493)", - "data": { - "$area": 1493, - "$dim": 1493, - "$color": "#80c080" - }},{ -"id": "javax/naming/ldap", - "name": "ldap ∑3079 (3079)", - "data": { - "$area": 3079, - "$dim": 3079, - "$color": "#80c080" - }}] -},{ -"id": "javax/lang/model", - "name": "lang.model ∑2573 (465)", - "data": { - "$area": 2573, - "$dim": 2573, - "$color": "#80c080" - },"children": [{ -"id": "javax/lang/model/element", - "name": "element ∑472 (472)", - "data": { - "$area": 472, - "$dim": 472, - "$color": "#80c080" - }},{ -"id": "javax/lang/model/util", - "name": "util ∑1241 (1241)", - "data": { - "$area": 1241, - "$dim": 1241, - "$color": "#80c080" - }},{ -"id": "javax/lang/model/type", - "name": "type ∑395 (395)", - "data": { - "$area": 395, - "$dim": 395, - "$color": "#80c080" - }}] -},{ -"id": "javax/security/sasl", - "name": "security.sasl ∑502 (502)", - "data": { - "$area": 502, - "$dim": 502, - "$color": "#80c080" - }},{ -"id": "javax/sql", - "name": "sql ∑7084 (50)", - "data": { - "$area": 7084, - "$dim": 7084, - "$color": "#80c080" - },"children": [{ -"id": "javax/sql/rowset", - "name": "rowset ∑7034 (2577)", - "data": { - "$area": 7034, - "$dim": 7034, - "$color": "#80c080" - },"children": [{ -"id": "javax/sql/rowset/serial", - "name": "serial ∑3490 (3490)", - "data": { - "$area": 3490, - "$dim": 3490, - "$color": "#80c080" - }},{ -"id": "javax/sql/rowset/spi", - "name": "spi ∑967 (967)", - "data": { - "$area": 967, - "$dim": 967, - "$color": "#80c080" - }}] -}] -},{ -"id": "javax/rmi", - "name": "rmi ∑1357 (281)", - "data": { - "$area": 1357, - "$dim": 1357, - "$color": "#80c080" - },"children": [{ -"id": "javax/rmi/CORBA", - "name": "CORBA ∑588 (588)", - "data": { - "$area": 588, - "$dim": 588, - "$color": "#80c080" - }},{ -"id": "javax/rmi/ssl", - "name": "ssl ∑488 (488)", - "data": { - "$area": 488, - "$dim": 488, - "$color": "#80c080" - }}] -},{ -"id": "javax/imageio", - "name": "imageio ∑20867 (6925)", - "data": { - "$area": 20867, - "$dim": 20867, - "$color": "#80c080" - },"children": [{ -"id": "javax/imageio/plugins/bmp", - "name": "plugins.bmp ∑33 (33)", - "data": { - "$area": 33, - "$dim": 33, - "$color": "#80c080" - }},{ -"id": "javax/imageio/plugins/jpeg", - "name": "plugins.jpeg ∑3502 (3502)", - "data": { - "$area": 3502, - "$dim": 3502, - "$color": "#80c080" - }},{ -"id": "javax/imageio/metadata", - "name": "metadata ∑2782 (2782)", - "data": { - "$area": 2782, - "$dim": 2782, - "$color": "#80c080" - }},{ -"id": "javax/imageio/stream", - "name": "stream ∑5608 (5608)", - "data": { - "$area": 5608, - "$dim": 5608, - "$color": "#80c080" - }},{ -"id": "javax/imageio/spi", - "name": "spi ∑2017 (2017)", - "data": { - "$area": 2017, - "$dim": 2017, - "$color": "#80c080" - }}] -},{ -"id": "javax/tools", - "name": "tools ∑1033 (1033)", - "data": { - "$area": 1033, - "$dim": 1033, - "$color": "#80c080" - }},{ -"id": "javax/xml", - "name": "xml ∑19796 (3)", - "data": { - "$area": 19796, - "$dim": 19796, - "$color": "#80c080" - },"children": [{ -"id": "javax/xml/parsers", - "name": "parsers ∑1337 (1337)", - "data": { - "$area": 1337, - "$dim": 1337, - "$color": "#80c080" - }},{ -"id": "javax/xml/namespace", - "name": "namespace ∑240 (240)", - "data": { - "$area": 240, - "$dim": 240, - "$color": "#80c080" - }},{ -"id": "javax/xml/ws", - "name": "ws ∑1325 (347)", - "data": { - "$area": 1325, - "$dim": 1325, - "$color": "#80c080" - },"children": [{ -"id": "javax/xml/ws/spi", - "name": "spi ∑507 (494)", - "data": { - "$area": 507, - "$dim": 507, - "$color": "#80c080" - },"children": [{ -"id": "javax/xml/ws/spi/http", - "name": "http ∑13 (13)", - "data": { - "$area": 13, - "$dim": 13, - "$color": "#80c080" - }}] -},{ -"id": "javax/xml/ws/wsaddressing", - "name": "wsaddressing ∑258 (258)", - "data": { - "$area": 258, - "$dim": 258, - "$color": "#80c080" - }},{ -"id": "javax/xml/ws/http", - "name": "http ∑9 (9)", - "data": { - "$area": 9, - "$dim": 9, - "$color": "#80c080" - }},{ -"id": "javax/xml/ws/soap", - "name": "soap ∑166 (166)", - "data": { - "$area": 166, - "$dim": 166, - "$color": "#80c080" - }},{ -"id": "javax/xml/ws/handler", - "name": "handler ∑38 (38)", - "data": { - "$area": 38, - "$dim": 38, - "$color": "#80c080" - }}] -},{ -"id": "javax/xml/datatype", - "name": "datatype ∑1615 (1615)", - "data": { - "$area": 1615, - "$dim": 1615, - "$color": "#80c080" - }},{ -"id": "javax/xml/xpath", - "name": "xpath ∑1242 (1242)", - "data": { - "$area": 1242, - "$dim": 1242, - "$color": "#80c080" - }},{ -"id": "javax/xml/validation", - "name": "validation ∑1260 (1260)", - "data": { - "$area": 1260, - "$dim": 1260, - "$color": "#80c080" - }},{ -"id": "javax/xml/stream", - "name": "stream ∑1145 (876)", - "data": { - "$area": 1145, - "$dim": 1145, - "$color": "#80c080" - },"children": [{ -"id": "javax/xml/stream/util", - "name": "util ∑269 (269)", - "data": { - "$area": 269, - "$dim": 269, - "$color": "#80c080" - }}] -},{ -"id": "javax/xml/soap", - "name": "soap ∑1038 (1038)", - "data": { - "$area": 1038, - "$dim": 1038, - "$color": "#80c080" - }},{ -"id": "javax/xml/crypto", - "name": "crypto ∑1744 (287)", - "data": { - "$area": 1744, - "$dim": 1744, - "$color": "#80c080" - },"children": [{ -"id": "javax/xml/crypto/dsig", - "name": "dsig ∑1244 (601)", - "data": { - "$area": 1244, - "$dim": 1244, - "$color": "#80c080" - },"children": [{ -"id": "javax/xml/crypto/dsig/keyinfo", - "name": "keyinfo ∑131 (131)", - "data": { - "$area": 131, - "$dim": 131, - "$color": "#80c080" - }},{ -"id": "javax/xml/crypto/dsig/dom", - "name": "dom ∑198 (198)", - "data": { - "$area": 198, - "$dim": 198, - "$color": "#80c080" - }},{ -"id": "javax/xml/crypto/dsig/spec", - "name": "spec ∑314 (314)", - "data": { - "$area": 314, - "$dim": 314, - "$color": "#80c080" - }}] -},{ -"id": "javax/xml/crypto/dom", - "name": "dom ∑213 (213)", - "data": { - "$area": 213, - "$dim": 213, - "$color": "#80c080" - }}] -},{ -"id": "javax/xml/transform", - "name": "transform ∑1768 (1108)", - "data": { - "$area": 1768, - "$dim": 1768, - "$color": "#80c080" - },"children": [{ -"id": "javax/xml/transform/stax", - "name": "stax ∑156 (156)", - "data": { - "$area": 156, - "$dim": 156, - "$color": "#80c080" - }},{ -"id": "javax/xml/transform/stream", - "name": "stream ∑137 (137)", - "data": { - "$area": 137, - "$dim": 137, - "$color": "#80c080" - }},{ -"id": "javax/xml/transform/sax", - "name": "sax ∑125 (125)", - "data": { - "$area": 125, - "$dim": 125, - "$color": "#80c080" - }},{ -"id": "javax/xml/transform/dom", - "name": "dom ∑242 (242)", - "data": { - "$area": 242, - "$dim": 242, - "$color": "#80c080" - }}] -},{ -"id": "javax/xml/bind", - "name": "bind ∑7079 (4516)", - "data": { - "$area": 7079, - "$dim": 7079, - "$color": "#80c080" - },"children": [{ -"id": "javax/xml/bind/util", - "name": "util ∑370 (370)", - "data": { - "$area": 370, - "$dim": 370, - "$color": "#80c080" - }},{ -"id": "javax/xml/bind/helpers", - "name": "helpers ∑1679 (1679)", - "data": { - "$area": 1679, - "$dim": 1679, - "$color": "#80c080" - }},{ -"id": "javax/xml/bind/attachment", - "name": "attachment ∑10 (10)", - "data": { - "$area": 10, - "$dim": 10, - "$color": "#80c080" - }},{ -"id": "javax/xml/bind/annotation", - "name": "annotation ∑504 (249)", - "data": { - "$area": 504, - "$dim": 504, - "$color": "#80c080" - },"children": [{ -"id": "javax/xml/bind/annotation/adapters", - "name": "adapters ∑255 (255)", - "data": { - "$area": 255, - "$dim": 255, - "$color": "#80c080" - }}] -}] -}] -},{ -"id": "javax/smartcardio", - "name": "smartcardio ∑1819 (1819)", - "data": { - "$area": 1819, - "$dim": 1819, - "$color": "#80c080" - }},{ -"id": "javax/jws", - "name": "jws ∑162 (48)", - "data": { - "$area": 162, - "$dim": 162, - "$color": "#80c080" - },"children": [{ -"id": "javax/jws/soap", - "name": "soap ∑114 (114)", - "data": { - "$area": 114, - "$dim": 114, - "$color": "#80c080" - }}] -},{ -"id": "javax/security/auth", - "name": "security.auth ∑9001 (3438)", - "data": { - "$area": 9001, - "$dim": 9001, - "$color": "#80c080" - },"children": [{ -"id": "javax/security/auth/callback", - "name": "callback ∑588 (588)", - "data": { - "$area": 588, - "$dim": 588, - "$color": "#80c080" - }},{ -"id": "javax/security/auth/kerberos", - "name": "kerberos ∑2995 (2995)", - "data": { - "$area": 2995, - "$dim": 2995, - "$color": "#80c080" - }},{ -"id": "javax/security/auth/login", - "name": "login ∑1643 (1643)", - "data": { - "$area": 1643, - "$dim": 1643, - "$color": "#80c080" - }},{ -"id": "javax/security/auth/x500", - "name": "x500 ∑337 (337)", - "data": { - "$area": 337, - "$dim": 337, - "$color": "#80c080" - }}] -},{ -"id": "javax/script", - "name": "script ∑1191 (1191)", - "data": { - "$area": 1191, - "$dim": 1191, - "$color": "#80c080" - }},{ -"id": "javax/annotation", - "name": "annotation ∑263 (38)", - "data": { - "$area": 263, - "$dim": 263, - "$color": "#80c080" - },"children": [{ -"id": "javax/annotation/processing", - "name": "processing ∑225 (225)", - "data": { - "$area": 225, - "$dim": 225, - "$color": "#80c080" - }}] -},{ -"id": "javax/swing", - "name": "swing ∑576204 (116338)", - "data": { - "$area": 576204, - "$dim": 576204, - "$color": "#80c080" - },"children": [{ -"id": "javax/swing/border", - "name": "border ∑2945 (2945)", - "data": { - "$area": 2945, - "$dim": 2945, - "$color": "#80c080" - }},{ -"id": "javax/swing/undo", - "name": "undo ∑1102 (1102)", - "data": { - "$area": 1102, - "$dim": 1102, - "$color": "#80c080" - }},{ -"id": "javax/swing/tree", - "name": "tree ∑10912 (10912)", - "data": { - "$area": 10912, - "$dim": 10912, - "$color": "#80c080" - }},{ -"id": "javax/swing/filechooser", - "name": "filechooser ∑1175 (1175)", - "data": { - "$area": 1175, - "$dim": 1175, - "$color": "#80c080" - }},{ -"id": "javax/swing/colorchooser", - "name": "colorchooser ∑8989 (8989)", - "data": { - "$area": 8989, - "$dim": 8989, - "$color": "#80c080" - }},{ -"id": "javax/swing/table", - "name": "table ∑3740 (3740)", - "data": { - "$area": 3740, - "$dim": 3740, - "$color": "#80c080" - }},{ -"id": "javax/swing/text", - "name": "text ∑110764 (52168)", - "data": { - "$area": 110764, - "$dim": 110764, - "$color": "#80c080" - },"children": [{ -"id": "javax/swing/text/html", - "name": "html ∑52370 (45152)", - "data": { - "$area": 52370, - "$dim": 52370, - "$color": "#80c080" - },"children": [{ -"id": "javax/swing/text/html/parser", - "name": "parser ∑7218 (7218)", - "data": { - "$area": 7218, - "$dim": 7218, - "$color": "#80c080" - }}] -},{ -"id": "javax/swing/text/rtf", - "name": "rtf ∑6226 (6226)", - "data": { - "$area": 6226, - "$dim": 6226, - "$color": "#80c080" - }}] -},{ -"id": "javax/swing/plaf", - "name": "plaf ∑318870 (724)", - "data": { - "$area": 318870, - "$dim": 318870, - "$color": "#80c080" - },"children": [{ -"id": "javax/swing/plaf/basic", - "name": "basic ∑99826 (99826)", - "data": { - "$area": 99826, - "$dim": 99826, - "$color": "#80c080" - }},{ -"id": "javax/swing/plaf/multi", - "name": "multi ∑10326 (10326)", - "data": { - "$area": 10326, - "$dim": 10326, - "$color": "#80c080" - }},{ -"id": "javax/swing/plaf/synth", - "name": "synth ∑41219 (41219)", - "data": { - "$area": 41219, - "$dim": 41219, - "$color": "#80c080" - }},{ -"id": "javax/swing/plaf/nimbus", - "name": "nimbus ∑124742 (124742)", - "data": { - "$area": 124742, - "$dim": 124742, - "$color": "#80c080" - }},{ -"id": "javax/swing/plaf/metal", - "name": "metal ∑42033 (42033)", - "data": { - "$area": 42033, - "$dim": 42033, - "$color": "#80c080" - }}] -},{ -"id": "javax/swing/event", - "name": "event ∑1369 (1369)", - "data": { - "$area": 1369, - "$dim": 1369, - "$color": "#80c080" - }}] -}] -},{ -"id": "org", - "name": "org ∑49360 (0)", - "data": { - "$area": 49360, - "$dim": 49360, - "$color": "#8080b0" - },"children": [{ -"id": "org/w3c/dom", - "name": "w3c.dom ∑393 (7)", - "data": { - "$area": 393, - "$dim": 393, - "$color": "#80c080" - },"children": [{ -"id": "org/w3c/dom/bootstrap", - "name": "bootstrap ∑358 (358)", - "data": { - "$area": 358, - "$dim": 358, - "$color": "#80c080" - }},{ -"id": "org/w3c/dom/ranges", - "name": "ranges ∑7 (7)", - "data": { - "$area": 7, - "$dim": 7, - "$color": "#80c080" - }},{ -"id": "org/w3c/dom/xpath", - "name": "xpath ∑7 (7)", - "data": { - "$area": 7, - "$dim": 7, - "$color": "#80c080" - }},{ -"id": "org/w3c/dom/events", - "name": "events ∑7 (7)", - "data": { - "$area": 7, - "$dim": 7, - "$color": "#80c080" - }},{ -"id": "org/w3c/dom/ls", - "name": "ls ∑7 (7)", - "data": { - "$area": 7, - "$dim": 7, - "$color": "#80c080" - }}] -},{ -"id": "org/omg/Dynamic", - "name": "omg.Dynamic ∑24 (24)", - "data": { - "$area": 24, - "$dim": 24, - "$color": "#80c080" - }},{ -"id": "org/omg/CosNaming", - "name": "omg.CosNaming ∑6699 (5461)", - "data": { - "$area": 6699, - "$dim": 6699, - "$color": "#80c080" - },"children": [{ -"id": "org/omg/CosNaming/NamingContextPackage", - "name": "NamingContextPackage ∑947 (947)", - "data": { - "$area": 947, - "$dim": 947, - "$color": "#80c080" - }},{ -"id": "org/omg/CosNaming/NamingContextExtPackage", - "name": "NamingContextExtPackage ∑291 (291)", - "data": { - "$area": 291, - "$dim": 291, - "$color": "#80c080" - }}] -},{ -"id": "org/omg/stub/javax/management/remote/rmi", - "name": "omg.stub.javax.management.remote.rmi ∑10326 (10326)", - "data": { - "$area": 10326, - "$dim": 10326, - "$color": "#80c080" - }},{ -"id": "org/omg/PortableServer", - "name": "omg.PortableServer ∑2618 (1280)", - "data": { - "$area": 2618, - "$dim": 2618, - "$color": "#80c080" - },"children": [{ -"id": "org/omg/PortableServer/ServantLocatorPackage", - "name": "ServantLocatorPackage ∑21 (21)", - "data": { - "$area": 21, - "$dim": 21, - "$color": "#80c080" - }},{ -"id": "org/omg/PortableServer/POAPackage", - "name": "POAPackage ∑1060 (1060)", - "data": { - "$area": 1060, - "$dim": 1060, - "$color": "#80c080" - }},{ -"id": "org/omg/PortableServer/POAManagerPackage", - "name": "POAManagerPackage ∑155 (155)", - "data": { - "$area": 155, - "$dim": 155, - "$color": "#80c080" - }},{ -"id": "org/omg/PortableServer/CurrentPackage", - "name": "CurrentPackage ∑102 (102)", - "data": { - "$area": 102, - "$dim": 102, - "$color": "#80c080" - }}] -},{ -"id": "org/omg/stub/java/rmi", - "name": "omg.stub.java.rmi ∑16 (16)", - "data": { - "$area": 16, - "$dim": 16, - "$color": "#80c080" - }},{ -"id": "org/omg/IOP", - "name": "omg.IOP ∑1717 (1309)", - "data": { - "$area": 1717, - "$dim": 1717, - "$color": "#80c080" - },"children": [{ -"id": "org/omg/IOP/CodecPackage", - "name": "CodecPackage ∑306 (306)", - "data": { - "$area": 306, - "$dim": 306, - "$color": "#80c080" - }},{ -"id": "org/omg/IOP/CodecFactoryPackage", - "name": "CodecFactoryPackage ∑102 (102)", - "data": { - "$area": 102, - "$dim": 102, - "$color": "#80c080" - }}] -},{ -"id": "org/jcp/xml/dsig/internal", - "name": "jcp.xml.dsig.internal ∑13343 (179)", - "data": { - "$area": 13343, - "$dim": 13343, - "$color": "#80c080" - },"children": [{ -"id": "org/jcp/xml/dsig/internal/dom", - "name": "dom ∑13164 (13164)", - "data": { - "$area": 13164, - "$dim": 13164, - "$color": "#80c080" - }}] -},{ -"id": "org/omg/Messaging", - "name": "omg.Messaging ∑54 (54)", - "data": { - "$area": 54, - "$dim": 54, - "$color": "#80c080" - }},{ -"id": "org/ietf/jgss", - "name": "ietf.jgss ∑670 (670)", - "data": { - "$area": 670, - "$dim": 670, - "$color": "#80c080" - }},{ -"id": "org/omg/CORBA", - "name": "omg.CORBA ∑7830 (7380)", - "data": { - "$area": 7830, - "$dim": 7830, - "$color": "#80c080" - },"children": [{ -"id": "org/omg/CORBA/DynAnyPackage", - "name": "DynAnyPackage ∑28 (28)", - "data": { - "$area": 28, - "$dim": 28, - "$color": "#80c080" - }},{ -"id": "org/omg/CORBA/TypeCodePackage", - "name": "TypeCodePackage ∑14 (14)", - "data": { - "$area": 14, - "$dim": 14, - "$color": "#80c080" - }},{ -"id": "org/omg/CORBA/ORBPackage", - "name": "ORBPackage ∑14 (14)", - "data": { - "$area": 14, - "$dim": 14, - "$color": "#80c080" - }},{ -"id": "org/omg/CORBA/portable", - "name": "portable ∑394 (394)", - "data": { - "$area": 394, - "$dim": 394, - "$color": "#80c080" - }}] -},{ -"id": "org/omg/PortableInterceptor", - "name": "omg.PortableInterceptor ∑1401 (1103)", - "data": { - "$area": 1401, - "$dim": 1401, - "$color": "#80c080" - },"children": [{ -"id": "org/omg/PortableInterceptor/ORBInitInfoPackage", - "name": "ORBInitInfoPackage ∑298 (298)", - "data": { - "$area": 298, - "$dim": 298, - "$color": "#80c080" - }}] -},{ -"id": "org/xml/sax", - "name": "xml.sax ∑4269 (311)", - "data": { - "$area": 4269, - "$dim": 4269, - "$color": "#80c080" - },"children": [{ -"id": "org/xml/sax/ext", - "name": "ext ∑451 (451)", - "data": { - "$area": 451, - "$dim": 451, - "$color": "#80c080" - }},{ -"id": "org/xml/sax/helpers", - "name": "helpers ∑3507 (3507)", - "data": { - "$area": 3507, - "$dim": 3507, - "$color": "#80c080" - }}] -}] -},{ -"id": "jdk", - "name": "jdk ∑62228 (0)", - "data": { - "$area": 62228, - "$dim": 62228, - "$color": "#8080b0" - },"children": [{ -"id": "jdk/internal/org/xml/sax", - "name": "internal.org.xml.sax ∑314 (292)", - "data": { - "$area": 314, - "$dim": 314, - "$color": "#80c080" - },"children": [{ -"id": "jdk/internal/org/xml/sax/helpers", - "name": "helpers ∑22 (22)", - "data": { - "$area": 22, - "$dim": 22, - "$color": "#80c080" - }}] -},{ -"id": "jdk/internal/util/xml", - "name": "internal.util.xml ∑7984 (496)", - "data": { - "$area": 7984, - "$dim": 7984, - "$color": "#80c080" - },"children": [{ -"id": "jdk/internal/util/xml/impl", - "name": "impl ∑7488 (7488)", - "data": { - "$area": 7488, - "$dim": 7488, - "$color": "#80c080" - }}] -},{ -"id": "jdk/internal/org/objectweb/asm", - "name": "internal.org.objectweb.asm ∑53930 (20706)", - "data": { - "$area": 53930, - "$dim": 53930, - "$color": "#80c080" - },"children": [{ -"id": "jdk/internal/org/objectweb/asm/signature", - "name": "signature ∑544 (544)", - "data": { - "$area": 544, - "$dim": 544, - "$color": "#80c080" - }},{ -"id": "jdk/internal/org/objectweb/asm/commons", - "name": "commons ∑9666 (9666)", - "data": { - "$area": 9666, - "$dim": 9666, - "$color": "#80c080" - }},{ -"id": "jdk/internal/org/objectweb/asm/tree", - "name": "tree ∑9279 (4706)", - "data": { - "$area": 9279, - "$dim": 9279, - "$color": "#80c080" - },"children": [{ -"id": "jdk/internal/org/objectweb/asm/tree/analysis", - "name": "analysis ∑4573 (4573)", - "data": { - "$area": 4573, - "$dim": 4573, - "$color": "#80c080" - }}] -},{ -"id": "jdk/internal/org/objectweb/asm/util", - "name": "util ∑13735 (13735)", - "data": { - "$area": 13735, - "$dim": 13735, - "$color": "#80c080" - }}] -}] -},{ -"id": "sun", - "name": "sun ∑1141226 (0)", - "data": { - "$area": 1141226, - "$dim": 1141226, - "$color": "#8080b0" - },"children": [{ -"id": "sun/security/tools", - "name": "security.tools ∑73022 (417)", - "data": { - "$area": 73022, - "$dim": 73022, - "$color": "#80c080" - },"children": [{ -"id": "sun/security/tools/policytool", - "name": "policytool ∑23344 (23344)", - "data": { - "$area": 23344, - "$dim": 23344, - "$color": "#80c080" - }},{ -"id": "sun/security/tools/keytool", - "name": "keytool ∑49261 (49261)", - "data": { - "$area": 49261, - "$dim": 49261, - "$color": "#80c080" - }}] -},{ -"id": "sun/rmi/log", - "name": "rmi.log ∑1404 (1404)", - "data": { - "$area": 1404, - "$dim": 1404, - "$color": "#80c080" - }},{ -"id": "sun/misc", - "name": "misc ∑28155 (27579)", - "data": { - "$area": 28155, - "$dim": 28155, - "$color": "#80c080" - },"children": [{ -"id": "sun/misc/resources", - "name": "resources ∑576 (576)", - "data": { - "$area": 576, - "$dim": 576, - "$color": "#80c080" - }}] -},{ -"id": "sun/util", - "name": "util ∑65229 (862)", - "data": { - "$area": 65229, - "$dim": 65229, - "$color": "#80c080" - },"children": [{ -"id": "sun/util/locale", - "name": "locale ∑17844 (7175)", - "data": { - "$area": 17844, - "$dim": 17844, - "$color": "#80c080" - },"children": [{ -"id": "sun/util/locale/provider", - "name": "provider ∑10669 (10669)", - "data": { - "$area": 10669, - "$dim": 10669, - "$color": "#80c080" - }}] -},{ -"id": "sun/util/calendar", - "name": "calendar ∑8801 (8801)", - "data": { - "$area": 8801, - "$dim": 8801, - "$color": "#80c080" - }},{ -"id": "sun/util/resources", - "name": "resources ∑34593 (32965)", - "data": { - "$area": 34593, - "$dim": 34593, - "$color": "#80c080" - },"children": [{ -"id": "sun/util/resources/en", - "name": "en ∑1628 (1628)", - "data": { - "$area": 1628, - "$dim": 1628, - "$color": "#80c080" - }}] -},{ -"id": "sun/util/spi", - "name": "spi ∑6 (6)", - "data": { - "$area": 6, - "$dim": 6, - "$color": "#80c080" - }},{ -"id": "sun/util/logging", - "name": "logging ∑2627 (1151)", - "data": { - "$area": 2627, - "$dim": 2627, - "$color": "#80c080" - },"children": [{ -"id": "sun/util/logging/resources", - "name": "resources ∑1476 (1476)", - "data": { - "$area": 1476, - "$dim": 1476, - "$color": "#80c080" - }}] -},{ -"id": "sun/util/cldr", - "name": "cldr ∑129 (129)", - "data": { - "$area": 129, - "$dim": 129, - "$color": "#80c080" - }},{ -"id": "sun/util/xml", - "name": "xml ∑367 (367)", - "data": { - "$area": 367, - "$dim": 367, - "$color": "#80c080" - }}] -},{ -"id": "sun/security/util", - "name": "security.util ∑31988 (31988)", - "data": { - "$area": 31988, - "$dim": 31988, - "$color": "#80c080" - }},{ -"id": "sun/nio/cs", - "name": "nio.cs ∑16804 (16804)", - "data": { - "$area": 16804, - "$dim": 16804, - "$color": "#80c080" - }},{ -"id": "sun/dc", - "name": "dc ∑2655 (1832)", - "data": { - "$area": 2655, - "$dim": 2655, - "$color": "#80c080" - },"children": [{ -"id": "sun/dc/path", - "name": "path ∑14 (14)", - "data": { - "$area": 14, - "$dim": 14, - "$color": "#80c080" - }},{ -"id": "sun/dc/pr", - "name": "pr ∑809 (809)", - "data": { - "$area": 809, - "$dim": 809, - "$color": "#80c080" - }}] -},{ -"id": "sun/security/krb5", - "name": "security.krb5 ∑39414 (11566)", - "data": { - "$area": 39414, - "$dim": 39414, - "$color": "#80c080" - },"children": [{ -"id": "sun/security/krb5/internal", - "name": "internal ∑27848 (13119)", - "data": { - "$area": 27848, - "$dim": 27848, - "$color": "#80c080" - },"children": [{ -"id": "sun/security/krb5/internal/rcache", - "name": "rcache ∑1430 (1430)", - "data": { - "$area": 1430, - "$dim": 1430, - "$color": "#80c080" - }},{ -"id": "sun/security/krb5/internal/crypto", - "name": "crypto ∑8895 (5781)", - "data": { - "$area": 8895, - "$dim": 8895, - "$color": "#80c080" - },"children": [{ -"id": "sun/security/krb5/internal/crypto/dk", - "name": "dk ∑3114 (3114)", - "data": { - "$area": 3114, - "$dim": 3114, - "$color": "#80c080" - }}] -},{ -"id": "sun/security/krb5/internal/ktab", - "name": "ktab ∑1506 (1506)", - "data": { - "$area": 1506, - "$dim": 1506, - "$color": "#80c080" - }},{ -"id": "sun/security/krb5/internal/util", - "name": "util ∑313 (313)", - "data": { - "$area": 313, - "$dim": 313, - "$color": "#80c080" - }},{ -"id": "sun/security/krb5/internal/ccache", - "name": "ccache ∑2585 (2585)", - "data": { - "$area": 2585, - "$dim": 2585, - "$color": "#80c080" - }}] -}] -},{ -"id": "sun/management", - "name": "management ∑40346 (10757)", - "data": { - "$area": 40346, - "$dim": 40346, - "$color": "#80c080" - },"children": [{ -"id": "sun/management/snmp", - "name": "snmp ∑17166 (617)", - "data": { - "$area": 17166, - "$dim": 17166, - "$color": "#80c080" - },"children": [{ -"id": "sun/management/snmp/util", - "name": "util ∑1072 (1072)", - "data": { - "$area": 1072, - "$dim": 1072, - "$color": "#80c080" - }},{ -"id": "sun/management/snmp/jvmmib", - "name": "jvmmib ∑8552 (8552)", - "data": { - "$area": 8552, - "$dim": 8552, - "$color": "#80c080" - }},{ -"id": "sun/management/snmp/jvminstr", - "name": "jvminstr ∑6925 (6925)", - "data": { - "$area": 6925, - "$dim": 6925, - "$color": "#80c080" - }}] -},{ -"id": "sun/management/jmxremote", - "name": "jmxremote ∑1669 (1669)", - "data": { - "$area": 1669, - "$dim": 1669, - "$color": "#80c080" - }},{ -"id": "sun/management/jdp", - "name": "jdp ∑746 (746)", - "data": { - "$area": 746, - "$dim": 746, - "$color": "#80c080" - }},{ -"id": "sun/management/resources", - "name": "resources ∑8340 (8340)", - "data": { - "$area": 8340, - "$dim": 8340, - "$color": "#80c080" - }},{ -"id": "sun/management/counter", - "name": "counter ∑1668 (239)", - "data": { - "$area": 1668, - "$dim": 1668, - "$color": "#80c080" - },"children": [{ -"id": "sun/management/counter/perf", - "name": "perf ∑1429 (1429)", - "data": { - "$area": 1429, - "$dim": 1429, - "$color": "#80c080" - }}] -}] -},{ -"id": "sun/usagetracker", - "name": "usagetracker ∑1064 (1064)", - "data": { - "$area": 1064, - "$dim": 1064, - "$color": "#80c080" - }},{ -"id": "sun/security/timestamp", - "name": "security.timestamp ∑755 (755)", - "data": { - "$area": 755, - "$dim": 755, - "$color": "#80c080" - }},{ -"id": "sun/security/jgss", - "name": "security.jgss ∑23242 (6402)", - "data": { - "$area": 23242, - "$dim": 23242, - "$color": "#80c080" - },"children": [{ -"id": "sun/security/jgss/spnego", - "name": "spnego ∑3003 (3003)", - "data": { - "$area": 3003, - "$dim": 3003, - "$color": "#80c080" - }},{ -"id": "sun/security/jgss/krb5", - "name": "krb5 ∑11133 (11133)", - "data": { - "$area": 11133, - "$dim": 11133, - "$color": "#80c080" - }},{ -"id": "sun/security/jgss/wrapper", - "name": "wrapper ∑2704 (2704)", - "data": { - "$area": 2704, - "$dim": 2704, - "$color": "#80c080" - }}] -},{ -"id": "sun/security/smartcardio", - "name": "security.smartcardio ∑2330 (2330)", - "data": { - "$area": 2330, - "$dim": 2330, - "$color": "#80c080" - }},{ -"id": "sun/rmi/server", - "name": "rmi.server ∑9698 (9698)", - "data": { - "$area": 9698, - "$dim": 9698, - "$color": "#80c080" - }},{ -"id": "sun/tools/jar", - "name": "tools.jar ∑7309 (3805)", - "data": { - "$area": 7309, - "$dim": 7309, - "$color": "#80c080" - },"children": [{ -"id": "sun/tools/jar/resources", - "name": "resources ∑3504 (3504)", - "data": { - "$area": 3504, - "$dim": 3504, - "$color": "#80c080" - }}] -},{ -"id": "sun/security/pkcs", - "name": "security.pkcs ∑6138 (6138)", - "data": { - "$area": 6138, - "$dim": 6138, - "$color": "#80c080" - }},{ -"id": "sun/corba", - "name": "corba ∑990 (990)", - "data": { - "$area": 990, - "$dim": 990, - "$color": "#80c080" - }},{ -"id": "sun/rmi/transport", - "name": "rmi.transport ∑12317 (4483)", - "data": { - "$area": 12317, - "$dim": 12317, - "$color": "#80c080" - },"children": [{ -"id": "sun/rmi/transport/tcp", - "name": "tcp ∑4998 (4998)", - "data": { - "$area": 4998, - "$dim": 4998, - "$color": "#80c080" - }},{ -"id": "sun/rmi/transport/proxy", - "name": "proxy ∑2836 (2836)", - "data": { - "$area": 2836, - "$dim": 2836, - "$color": "#80c080" - }}] -},{ -"id": "sun/tracing", - "name": "tracing ∑1228 (678)", - "data": { - "$area": 1228, - "$dim": 1228, - "$color": "#80c080" - },"children": [{ -"id": "sun/tracing/dtrace", - "name": "dtrace ∑550 (550)", - "data": { - "$area": 550, - "$dim": 550, - "$color": "#80c080" - }}] -},{ -"id": "sun/lwawt", - "name": "lwawt ∑26071 (9394)", - "data": { - "$area": 26071, - "$dim": 26071, - "$color": "#80c080" - },"children": [{ -"id": "sun/lwawt/macosx", - "name": "macosx ∑16677 (16425)", - "data": { - "$area": 16677, - "$dim": 16677, - "$color": "#80c080" - },"children": [{ -"id": "sun/lwawt/macosx/event", - "name": "event ∑252 (252)", - "data": { - "$area": 252, - "$dim": 252, - "$color": "#80c080" - }}] -}] -},{ -"id": "sun/security/validator", - "name": "security.validator ∑1977 (1977)", - "data": { - "$area": 1977, - "$dim": 1977, - "$color": "#80c080" - }},{ -"id": "sun/applet", - "name": "applet ∑34032 (8508)", - "data": { - "$area": 34032, - "$dim": 34032, - "$color": "#80c080" - },"children": [{ -"id": "sun/applet/resources", - "name": "resources ∑25524 (25524)", - "data": { - "$area": 25524, - "$dim": 25524, - "$color": "#80c080" - }}] -},{ -"id": "sun/invoke/empty", - "name": "invoke.empty ∑6 (6)", - "data": { - "$area": 6, - "$dim": 6, - "$color": "#80c080" - }},{ -"id": "sun/awt", - "name": "awt ∑220946 (161259)", - "data": { - "$area": 220946, - "$dim": 220946, - "$color": "#80c080" - },"children": [{ -"id": "sun/awt/im", - "name": "im ∑4639 (4639)", - "data": { - "$area": 4639, - "$dim": 4639, - "$color": "#80c080" - }},{ -"id": "sun/awt/util", - "name": "util ∑1575 (1575)", - "data": { - "$area": 1575, - "$dim": 1575, - "$color": "#80c080" - }},{ -"id": "sun/awt/motif", - "name": "motif ∑6500 (6500)", - "data": { - "$area": 6500, - "$dim": 6500, - "$color": "#80c080" - }},{ -"id": "sun/awt/windows", - "name": "windows ∑32 (32)", - "data": { - "$area": 32, - "$dim": 32, - "$color": "#80c080" - }},{ -"id": "sun/awt/dnd", - "name": "dnd ∑2115 (2115)", - "data": { - "$area": 2115, - "$dim": 2115, - "$color": "#80c080" - }},{ -"id": "sun/awt/shell", - "name": "shell ∑1026 (1026)", - "data": { - "$area": 1026, - "$dim": 1026, - "$color": "#80c080" - }},{ -"id": "sun/awt/event", - "name": "event ∑6 (6)", - "data": { - "$area": 6, - "$dim": 6, - "$color": "#80c080" - }},{ -"id": "sun/awt/datatransfer", - "name": "datatransfer ∑6700 (6700)", - "data": { - "$area": 6700, - "$dim": 6700, - "$color": "#80c080" - }},{ -"id": "sun/awt/geom", - "name": "geom ∑9703 (9703)", - "data": { - "$area": 9703, - "$dim": 9703, - "$color": "#80c080" - }},{ -"id": "sun/awt/resources", - "name": "resources ∑27391 (27391)", - "data": { - "$area": 27391, - "$dim": 27391, - "$color": "#80c080" - }}] -},{ -"id": "sun/security/x509", - "name": "security.x509 ∑33524 (33524)", - "data": { - "$area": 33524, - "$dim": 33524, - "$color": "#80c080" - }},{ -"id": "sun/instrument", - "name": "instrument ∑743 (743)", - "data": { - "$area": 743, - "$dim": 743, - "$color": "#80c080" - }},{ -"id": "sun/security/action", - "name": "security.action ∑204 (204)", - "data": { - "$area": 204, - "$dim": 204, - "$color": "#80c080" - }},{ -"id": "sun/launcher", - "name": "launcher ∑4560 (1524)", - "data": { - "$area": 4560, - "$dim": 4560, - "$color": "#80c080" - },"children": [{ -"id": "sun/launcher/resources", - "name": "resources ∑3036 (3036)", - "data": { - "$area": 3036, - "$dim": 3036, - "$color": "#80c080" - }}] -},{ -"id": "sun/nio/fs", - "name": "nio.fs ∑13968 (13968)", - "data": { - "$area": 13968, - "$dim": 13968, - "$color": "#80c080" - }},{ -"id": "sun/net", - "name": "net ∑61743 (19247)", - "data": { - "$area": 61743, - "$dim": 61743, - "$color": "#80c080" - },"children": [{ -"id": "sun/net/util", - "name": "util ∑687 (687)", - "data": { - "$area": 687, - "$dim": 687, - "$color": "#80c080" - }},{ -"id": "sun/net/smtp", - "name": "smtp ∑499 (499)", - "data": { - "$area": 499, - "$dim": 499, - "$color": "#80c080" - }},{ -"id": "sun/net/dns", - "name": "dns ∑376 (376)", - "data": { - "$area": 376, - "$dim": 376, - "$color": "#80c080" - }},{ -"id": "sun/net/ftp", - "name": "ftp ∑5175 (1375)", - "data": { - "$area": 5175, - "$dim": 5175, - "$color": "#80c080" - },"children": [{ -"id": "sun/net/ftp/impl", - "name": "impl ∑3800 (3800)", - "data": { - "$area": 3800, - "$dim": 3800, - "$color": "#80c080" - }}] -},{ -"id": "sun/net/httpserver", - "name": "httpserver ∑7557 (7557)", - "data": { - "$area": 7557, - "$dim": 7557, - "$color": "#80c080" - }},{ -"id": "sun/net/spi", - "name": "spi ∑681 (681)", - "data": { - "$area": 681, - "$dim": 681, - "$color": "#80c080" - }},{ -"id": "sun/net/sdp", - "name": "sdp ∑788 (788)", - "data": { - "$area": 788, - "$dim": 788, - "$color": "#80c080" - }},{ -"id": "sun/net/www", - "name": "www ∑24196 (5586)", - "data": { - "$area": 24196, - "$dim": 24196, - "$color": "#80c080" - },"children": [{ -"id": "sun/net/www/protocol/jar", - "name": "protocol.jar ∑1375 (1375)", - "data": { - "$area": 1375, - "$dim": 1375, - "$color": "#80c080" - }},{ -"id": "sun/net/www/http", - "name": "http ∑4349 (4349)", - "data": { - "$area": 4349, - "$dim": 4349, - "$color": "#80c080" - }},{ -"id": "sun/net/www/protocol/mailto", - "name": "protocol.mailto ∑263 (263)", - "data": { - "$area": 263, - "$dim": 263, - "$color": "#80c080" - }},{ -"id": "sun/net/www/content/image", - "name": "content.image ∑230 (230)", - "data": { - "$area": 230, - "$dim": 230, - "$color": "#80c080" - }},{ -"id": "sun/net/www/content/audio", - "name": "content.audio ∑40 (40)", - "data": { - "$area": 40, - "$dim": 40, - "$color": "#80c080" - }},{ -"id": "sun/net/www/protocol/netdoc", - "name": "protocol.netdoc ∑89 (89)", - "data": { - "$area": 89, - "$dim": 89, - "$color": "#80c080" - }},{ -"id": "sun/net/www/protocol/http", - "name": "protocol.http ∑10592 (9816)", - "data": { - "$area": 10592, - "$dim": 10592, - "$color": "#80c080" - },"children": [{ -"id": "sun/net/www/protocol/http/logging", - "name": "logging ∑265 (265)", - "data": { - "$area": 265, - "$dim": 265, - "$color": "#80c080" - }},{ -"id": "sun/net/www/protocol/http/ntlm", - "name": "ntlm ∑261 (261)", - "data": { - "$area": 261, - "$dim": 261, - "$color": "#80c080" - }},{ -"id": "sun/net/www/protocol/http/spnego", - "name": "spnego ∑250 (250)", - "data": { - "$area": 250, - "$dim": 250, - "$color": "#80c080" - }}] -},{ -"id": "sun/net/www/content/text", - "name": "content.text ∑30 (30)", - "data": { - "$area": 30, - "$dim": 30, - "$color": "#80c080" - }},{ -"id": "sun/net/www/protocol/ftp", - "name": "protocol.ftp ∑1132 (1132)", - "data": { - "$area": 1132, - "$dim": 1132, - "$color": "#80c080" - }},{ -"id": "sun/net/www/protocol/file", - "name": "protocol.file ∑510 (510)", - "data": { - "$area": 510, - "$dim": 510, - "$color": "#80c080" - }}] -},{ -"id": "sun/net/idn", - "name": "idn ∑2537 (2537)", - "data": { - "$area": 2537, - "$dim": 2537, - "$color": "#80c080" - }}] -},{ -"id": "sun/font", - "name": "font ∑55369 (55369)", - "data": { - "$area": 55369, - "$dim": 55369, - "$color": "#80c080" - }},{ -"id": "sun/audio", - "name": "audio ∑781 (781)", - "data": { - "$area": 781, - "$dim": 781, - "$color": "#80c080" - }},{ -"id": "sun/invoke/util", - "name": "invoke.util ∑6517 (6517)", - "data": { - "$area": 6517, - "$dim": 6517, - "$color": "#80c080" - }},{ -"id": "sun/rmi/runtime", - "name": "rmi.runtime ∑805 (805)", - "data": { - "$area": 805, - "$dim": 805, - "$color": "#80c080" - }},{ -"id": "sun/print", - "name": "print ∑63049 (38173)", - "data": { - "$area": 63049, - "$dim": 63049, - "$color": "#80c080" - },"children": [{ -"id": "sun/print/resources", - "name": "resources ∑24876 (24876)", - "data": { - "$area": 24876, - "$dim": 24876, - "$color": "#80c080" - }}] -},{ -"id": "sun/nio/ch", - "name": "nio.ch ∑29473 (27887)", - "data": { - "$area": 29473, - "$dim": 29473, - "$color": "#80c080" - },"children": [{ -"id": "sun/nio/ch/sctp", - "name": "sctp ∑1586 (1586)", - "data": { - "$area": 1586, - "$dim": 1586, - "$color": "#80c080" - }}] -},{ -"id": "sun/text", - "name": "text ∑30835 (2118)", - "data": { - "$area": 30835, - "$dim": 30835, - "$color": "#80c080" - },"children": [{ -"id": "sun/text/normalizer", - "name": "normalizer ∑13918 (13918)", - "data": { - "$area": 13918, - "$dim": 13918, - "$color": "#80c080" - }},{ -"id": "sun/text/bidi", - "name": "bidi ∑8752 (8752)", - "data": { - "$area": 8752, - "$dim": 8752, - "$color": "#80c080" - }},{ -"id": "sun/text/resources", - "name": "resources ∑6047 (3984)", - "data": { - "$area": 6047, - "$dim": 6047, - "$color": "#80c080" - },"children": [{ -"id": "sun/text/resources/en", - "name": "en ∑2063 (2063)", - "data": { - "$area": 2063, - "$dim": 2063, - "$color": "#80c080" - }}] -}] -},{ -"id": "sun/security/acl", - "name": "security.acl ∑1005 (1005)", - "data": { - "$area": 1005, - "$dim": 1005, - "$color": "#80c080" - }},{ -"id": "sun/reflect", - "name": "reflect ∑20051 (11425)", - "data": { - "$area": 20051, - "$dim": 20051, - "$color": "#80c080" - },"children": [{ -"id": "sun/reflect/misc", - "name": "misc ∑1035 (1035)", - "data": { - "$area": 1035, - "$dim": 1035, - "$color": "#80c080" - }},{ -"id": "sun/reflect/generics/tree", - "name": "generics.tree ∑364 (364)", - "data": { - "$area": 364, - "$dim": 364, - "$color": "#80c080" - }},{ -"id": "sun/reflect/generics/repository", - "name": "generics.repository ∑320 (320)", - "data": { - "$area": 320, - "$dim": 320, - "$color": "#80c080" - }},{ -"id": "sun/reflect/annotation", - "name": "annotation ∑4532 (4532)", - "data": { - "$area": 4532, - "$dim": 4532, - "$color": "#80c080" - }},{ -"id": "sun/reflect/generics/parser", - "name": "generics.parser ∑904 (904)", - "data": { - "$area": 904, - "$dim": 904, - "$color": "#80c080" - }},{ -"id": "sun/reflect/generics/scope", - "name": "generics.scope ∑138 (138)", - "data": { - "$area": 138, - "$dim": 138, - "$color": "#80c080" - }},{ -"id": "sun/reflect/generics/reflectiveObjects", - "name": "generics.reflectiveObjects ∑878 (878)", - "data": { - "$area": 878, - "$dim": 878, - "$color": "#80c080" - }},{ -"id": "sun/reflect/generics/factory", - "name": "generics.factory ∑131 (131)", - "data": { - "$area": 131, - "$dim": 131, - "$color": "#80c080" - }},{ -"id": "sun/reflect/generics/visitor", - "name": "generics.visitor ∑324 (324)", - "data": { - "$area": 324, - "$dim": 324, - "$color": "#80c080" - }}] -},{ -"id": "sun/security/jca", - "name": "security.jca ∑1890 (1890)", - "data": { - "$area": 1890, - "$dim": 1890, - "$color": "#80c080" - }},{ -"id": "sun/invoke/anon", - "name": "invoke.anon ∑2206 (2206)", - "data": { - "$area": 2206, - "$dim": 2206, - "$color": "#80c080" - }},{ -"id": "sun/rmi/registry", - "name": "rmi.registry ∑1339 (1339)", - "data": { - "$area": 1339, - "$dim": 1339, - "$color": "#80c080" - }},{ -"id": "sun/security/provider", - "name": "security.provider ∑47687 (28120)", - "data": { - "$area": 47687, - "$dim": 47687, - "$color": "#80c080" - },"children": [{ -"id": "sun/security/provider/certpath", - "name": "certpath ∑19567 (17809)", - "data": { - "$area": 19567, - "$dim": 19567, - "$color": "#80c080" - },"children": [{ -"id": "sun/security/provider/certpath/ldap", - "name": "ldap ∑1496 (1496)", - "data": { - "$area": 1496, - "$dim": 1496, - "$color": "#80c080" - }},{ -"id": "sun/security/provider/certpath/ssl", - "name": "ssl ∑262 (262)", - "data": { - "$area": 262, - "$dim": 262, - "$color": "#80c080" - }}] -}] -},{ -"id": "sun/swing", - "name": "swing ∑30362 (12863)", - "data": { - "$area": 30362, - "$dim": 30362, - "$color": "#80c080" - },"children": [{ -"id": "sun/swing/plaf", - "name": "plaf ∑15547 (9542)", - "data": { - "$area": 15547, - "$dim": 15547, - "$color": "#80c080" - },"children": [{ -"id": "sun/swing/plaf/windows", - "name": "windows ∑145 (145)", - "data": { - "$area": 145, - "$dim": 145, - "$color": "#80c080" - }},{ -"id": "sun/swing/plaf/synth", - "name": "synth ∑5860 (5860)", - "data": { - "$area": 5860, - "$dim": 5860, - "$color": "#80c080" - }}] -},{ -"id": "sun/swing/table", - "name": "table ∑368 (368)", - "data": { - "$area": 368, - "$dim": 368, - "$color": "#80c080" - }},{ -"id": "sun/swing/icon", - "name": "icon ∑121 (121)", - "data": { - "$area": 121, - "$dim": 121, - "$color": "#80c080" - }},{ -"id": "sun/swing/text", - "name": "text ∑1463 (1463)", - "data": { - "$area": 1463, - "$dim": 1463, - "$color": "#80c080" - }}] -},{ -"id": "sun/java2d", - "name": "java2d ∑85074 (16410)", - "data": { - "$area": 85074, - "$dim": 85074, - "$color": "#80c080" - },"children": [{ -"id": "sun/java2d/xr", - "name": "xr ∑8736 (8736)", - "data": { - "$area": 8736, - "$dim": 8736, - "$color": "#80c080" - }},{ -"id": "sun/java2d/cmm", - "name": "cmm ∑7412 (680)", - "data": { - "$area": 7412, - "$dim": 7412, - "$color": "#80c080" - },"children": [{ -"id": "sun/java2d/cmm/lcms", - "name": "lcms ∑2990 (2990)", - "data": { - "$area": 2990, - "$dim": 2990, - "$color": "#80c080" - }},{ -"id": "sun/java2d/cmm/kcms", - "name": "kcms ∑3742 (3742)", - "data": { - "$area": 3742, - "$dim": 3742, - "$color": "#80c080" - }}] -},{ -"id": "sun/java2d/pipe", - "name": "pipe ∑16036 (15675)", - "data": { - "$area": 16036, - "$dim": 16036, - "$color": "#80c080" - },"children": [{ -"id": "sun/java2d/pipe/hw", - "name": "hw ∑361 (361)", - "data": { - "$area": 361, - "$dim": 361, - "$color": "#80c080" - }}] -},{ -"id": "sun/java2d/loops", - "name": "loops ∑13401 (13401)", - "data": { - "$area": 13401, - "$dim": 13401, - "$color": "#80c080" - }},{ -"id": "sun/java2d/jules", - "name": "jules ∑1951 (1951)", - "data": { - "$area": 1951, - "$dim": 1951, - "$color": "#80c080" - }},{ -"id": "sun/java2d/pisces", - "name": "pisces ∑12242 (12242)", - "data": { - "$area": 12242, - "$dim": 12242, - "$color": "#80c080" - }},{ -"id": "sun/java2d/x11", - "name": "x11 ∑2622 (2622)", - "data": { - "$area": 2622, - "$dim": 2622, - "$color": "#80c080" - }},{ -"id": "sun/java2d/opengl", - "name": "opengl ∑6264 (6264)", - "data": { - "$area": 6264, - "$dim": 6264, - "$color": "#80c080" - }}] -},{ -"id": "sun/security/rsa", - "name": "security.rsa ∑2921 (2921)", - "data": { - "$area": 2921, - "$dim": 2921, - "$color": "#80c080" - }}] -},{ -"id": "apple", - "name": "apple ∑5892 (0)", - "data": { - "$area": 5892, - "$dim": 5892, - "$color": "#8080b0" - },"children": [{ -"id": "apple/laf", - "name": "laf ∑3032 (3032)", - "data": { - "$area": 3032, - "$dim": 3032, - "$color": "#80c080" - }},{ -"id": "apple/security", - "name": "security ∑1806 (1806)", - "data": { - "$area": 1806, - "$dim": 1806, - "$color": "#80c080" - }},{ -"id": "apple/applescript", - "name": "applescript ∑538 (538)", - "data": { - "$area": 538, - "$dim": 538, - "$color": "#80c080" - }},{ -"id": "apple/launcher", - "name": "launcher ∑516 (516)", - "data": { - "$area": 516, - "$dim": 516, - "$color": "#80c080" - }}] -},{ -"id": "com", - "name": "com ∑1702824 (0)", - "data": { - "$area": 1702824, - "$dim": 1702824, - "$color": "#8080b0" - },"children": [{ -"id": "com/sun/java/util/jar/pack", - "name": "sun.java.util.jar.pack ∑58850 (58850)", - "data": { - "$area": 58850, - "$dim": 58850, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/impl/encoding", - "name": "sun.corba.se.impl.encoding ∑17173 (17173)", - "data": { - "$area": 17173, - "$dim": 17173, - "$color": "#80c080" - }},{ -"id": "com/sun/image/codec/jpeg", - "name": "sun.image.codec.jpeg ∑2640 (2640)", - "data": { - "$area": 2640, - "$dim": 2640, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/internal/CosNaming", - "name": "sun.corba.se.internal.CosNaming ∑140 (140)", - "data": { - "$area": 140, - "$dim": 140, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/spi/logging", - "name": "sun.corba.se.spi.logging ∑103 (103)", - "data": { - "$area": 103, - "$dim": 103, - "$color": "#80c080" - }},{ -"id": "com/sun/jndi/url/rmi", - "name": "sun.jndi.url.rmi ∑277 (277)", - "data": { - "$area": 277, - "$dim": 277, - "$color": "#80c080" - }},{ -"id": "com/sun/media/sound", - "name": "sun.media.sound ∑92467 (92467)", - "data": { - "$area": 92467, - "$dim": 92467, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/wsdl", - "name": "sun.xml.internal.ws.wsdl ∑9771 (876)", - "data": { - "$area": 9771, - "$dim": 9771, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/ws/wsdl/parser", - "name": "parser ∑4712 (4712)", - "data": { - "$area": 4712, - "$dim": 4712, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/wsdl/writer", - "name": "writer ∑4183 (4183)", - "data": { - "$area": 4183, - "$dim": 4183, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/imageio/spi", - "name": "sun.imageio.spi ∑190 (190)", - "data": { - "$area": 190, - "$dim": 190, - "$color": "#80c080" - }},{ -"id": "com/sun/jndi/ldap", - "name": "sun.jndi.ldap ∑28986 (26596)", - "data": { - "$area": 28986, - "$dim": 28986, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/jndi/ldap/sasl", - "name": "sasl ∑919 (919)", - "data": { - "$area": 919, - "$dim": 919, - "$color": "#80c080" - }},{ -"id": "com/sun/jndi/ldap/pool", - "name": "pool ∑1108 (1108)", - "data": { - "$area": 1108, - "$dim": 1108, - "$color": "#80c080" - }},{ -"id": "com/sun/jndi/ldap/ext", - "name": "ext ∑363 (363)", - "data": { - "$area": 363, - "$dim": 363, - "$color": "#80c080" - }}] -},{ -"id": "com/oracle/xmlns/internal/webservices/jaxws_databinding", - "name": "oracle.xmlns.internal.webservices.jaxws_databinding ∑1546 (1546)", - "data": { - "$area": 1546, - "$dim": 1546, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xml/internal/dtm", - "name": "sun.org.apache.xml.internal.dtm ∑24823 (642)", - "data": { - "$area": 24823, - "$dim": 24823, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xml/internal/dtm/ref", - "name": "ref ∑24181 (14714)", - "data": { - "$area": 24181, - "$dim": 24181, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xml/internal/dtm/ref/dom2dtm", - "name": "dom2dtm ∑2013 (2013)", - "data": { - "$area": 2013, - "$dim": 2013, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xml/internal/dtm/ref/sax2dtm", - "name": "sax2dtm ∑7454 (7454)", - "data": { - "$area": 7454, - "$dim": 7454, - "$color": "#80c080" - }}] -}] -},{ -"id": "com/oracle/net", - "name": "oracle.net ∑159 (159)", - "data": { - "$area": 159, - "$dim": 159, - "$color": "#80c080" - }},{ -"id": "com/sun/jndi/toolkit/url", - "name": "sun.jndi.toolkit.url ∑1950 (1950)", - "data": { - "$area": 1950, - "$dim": 1950, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/spi", - "name": "sun.xml.internal.ws.spi ∑3238 (425)", - "data": { - "$area": 3238, - "$dim": 3238, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/ws/spi/db", - "name": "db ∑2813 (2813)", - "data": { - "$area": 2813, - "$dim": 2813, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/org/apache/xpath/internal", - "name": "sun.org.apache.xpath.internal ∑56705 (5483)", - "data": { - "$area": 56705, - "$dim": 56705, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xpath/internal/operations", - "name": "operations ∑828 (828)", - "data": { - "$area": 828, - "$dim": 828, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xpath/internal/patterns", - "name": "patterns ∑2329 (2329)", - "data": { - "$area": 2329, - "$dim": 2329, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xpath/internal/domapi", - "name": "domapi ∑991 (991)", - "data": { - "$area": 991, - "$dim": 991, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xpath/internal/functions", - "name": "functions ∑2602 (2602)", - "data": { - "$area": 2602, - "$dim": 2602, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xpath/internal/res", - "name": "res ∑24234 (24234)", - "data": { - "$area": 24234, - "$dim": 24234, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xpath/internal/jaxp", - "name": "jaxp ∑1677 (1677)", - "data": { - "$area": 1677, - "$dim": 1677, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xpath/internal/compiler", - "name": "compiler ∑6549 (6549)", - "data": { - "$area": 6549, - "$dim": 6549, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xpath/internal/objects", - "name": "objects ∑3801 (3801)", - "data": { - "$area": 3801, - "$dim": 3801, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xpath/internal/axes", - "name": "axes ∑8211 (8211)", - "data": { - "$area": 8211, - "$dim": 8211, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/corba/se/impl/dynamicany", - "name": "sun.corba.se.impl.dynamicany ∑7384 (7384)", - "data": { - "$area": 7384, - "$dim": 7384, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xerces/internal/xs", - "name": "sun.org.apache.xerces.internal.xs ∑7 (7)", - "data": { - "$area": 7, - "$dim": 7, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xalan/internal", - "name": "sun.org.apache.xalan.internal ∑55537 (103)", - "data": { - "$area": 55537, - "$dim": 55537, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xalan/internal/utils", - "name": "utils ∑2002 (2002)", - "data": { - "$area": 2002, - "$dim": 2002, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xalan/internal/templates", - "name": "templates ∑3 (3)", - "data": { - "$area": 3, - "$dim": 3, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xalan/internal/xslt", - "name": "xslt ∑3966 (3966)", - "data": { - "$area": 3966, - "$dim": 3966, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xalan/internal/lib", - "name": "lib ∑3600 (3600)", - "data": { - "$area": 3600, - "$dim": 3600, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xalan/internal/res", - "name": "res ∑45863 (45863)", - "data": { - "$area": 45863, - "$dim": 45863, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/org/apache/xml/internal/security", - "name": "sun.org.apache.xml.internal.security ∑40855 (690)", - "data": { - "$area": 40855, - "$dim": 40855, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xml/internal/security/utils", - "name": "utils ∑8622 (6642)", - "data": { - "$area": 8622, - "$dim": 8622, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xml/internal/security/utils/resolver", - "name": "resolver ∑1980 (786)", - "data": { - "$area": 1980, - "$dim": 1980, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xml/internal/security/utils/resolver/implementations", - "name": "implementations ∑1194 (1194)", - "data": { - "$area": 1194, - "$dim": 1194, - "$color": "#80c080" - }}] -}] -},{ -"id": "com/sun/org/apache/xml/internal/security/c14n", - "name": "c14n ∑5780 (329)", - "data": { - "$area": 5780, - "$dim": 5780, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xml/internal/security/c14n/helper", - "name": "helper ∑221 (221)", - "data": { - "$area": 221, - "$dim": 221, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xml/internal/security/c14n/implementations", - "name": "implementations ∑5230 (5230)", - "data": { - "$area": 5230, - "$dim": 5230, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/org/apache/xml/internal/security/algorithms", - "name": "algorithms ∑3801 (1612)", - "data": { - "$area": 3801, - "$dim": 3801, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xml/internal/security/algorithms/implementations", - "name": "implementations ∑2189 (2189)", - "data": { - "$area": 2189, - "$dim": 2189, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/org/apache/xml/internal/security/keys", - "name": "keys ∑7874 (1613)", - "data": { - "$area": 7874, - "$dim": 7874, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xml/internal/security/keys/storage", - "name": "storage ∑859 (184)", - "data": { - "$area": 859, - "$dim": 859, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xml/internal/security/keys/storage/implementations", - "name": "implementations ∑675 (675)", - "data": { - "$area": 675, - "$dim": 675, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/org/apache/xml/internal/security/keys/content", - "name": "content ∑1747 (956)", - "data": { - "$area": 1747, - "$dim": 1747, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xml/internal/security/keys/content/x509", - "name": "x509 ∑560 (560)", - "data": { - "$area": 560, - "$dim": 560, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xml/internal/security/keys/content/keyvalues", - "name": "keyvalues ∑231 (231)", - "data": { - "$area": 231, - "$dim": 231, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/org/apache/xml/internal/security/keys/keyresolver", - "name": "keyresolver ∑3655 (674)", - "data": { - "$area": 3655, - "$dim": 3655, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations", - "name": "implementations ∑2981 (2981)", - "data": { - "$area": 2981, - "$dim": 2981, - "$color": "#80c080" - }}] -}] -},{ -"id": "com/sun/org/apache/xml/internal/security/exceptions", - "name": "exceptions ∑341 (341)", - "data": { - "$area": 341, - "$dim": 341, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xml/internal/security/signature", - "name": "signature ∑5107 (4870)", - "data": { - "$area": 5107, - "$dim": 5107, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xml/internal/security/signature/reference", - "name": "reference ∑237 (237)", - "data": { - "$area": 237, - "$dim": 237, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/org/apache/xml/internal/security/encryption", - "name": "encryption ∑5240 (5240)", - "data": { - "$area": 5240, - "$dim": 5240, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xml/internal/security/transforms", - "name": "transforms ∑3400 (1188)", - "data": { - "$area": 3400, - "$dim": 3400, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xml/internal/security/transforms/params", - "name": "params ∑789 (789)", - "data": { - "$area": 789, - "$dim": 789, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xml/internal/security/transforms/implementations", - "name": "implementations ∑1423 (1423)", - "data": { - "$area": 1423, - "$dim": 1423, - "$color": "#80c080" - }}] -}] -},{ -"id": "com/sun/xml/internal/ws/config/metro/dev", - "name": "sun.xml.internal.ws.config.metro.dev ∑6 (6)", - "data": { - "$area": 6, - "$dim": 6, - "$color": "#80c080" - }},{ -"id": "com/sun/tracing", - "name": "sun.tracing ∑395 (159)", - "data": { - "$area": 395, - "$dim": 395, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/tracing/dtrace", - "name": "dtrace ∑236 (236)", - "data": { - "$area": 236, - "$dim": 236, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/corba/se/spi/encoding", - "name": "sun.corba.se.spi.encoding ∑13 (13)", - "data": { - "$area": 13, - "$dim": 13, - "$color": "#80c080" - }},{ -"id": "com/sun/net/httpserver", - "name": "sun.net.httpserver ∑723 (603)", - "data": { - "$area": 723, - "$dim": 723, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/net/httpserver/spi", - "name": "spi ∑120 (120)", - "data": { - "$area": 120, - "$dim": 120, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/messaging/saaj", - "name": "sun.xml.internal.messaging.saaj ∑33278 (108)", - "data": { - "$area": 33278, - "$dim": 33278, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/messaging/saaj/soap", - "name": "soap ∑15818 (6747)", - "data": { - "$area": 15818, - "$dim": 15818, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/messaging/saaj/soap/dynamic", - "name": "dynamic ∑18 (18)", - "data": { - "$area": 18, - "$dim": 18, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/messaging/saaj/soap/impl", - "name": "impl ∑4995 (4995)", - "data": { - "$area": 4995, - "$dim": 4995, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/messaging/saaj/soap/ver1_2", - "name": "ver1_2 ∑2053 (2053)", - "data": { - "$area": 2053, - "$dim": 2053, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/messaging/saaj/soap/ver1_1", - "name": "ver1_1 ∑1278 (1278)", - "data": { - "$area": 1278, - "$dim": 1278, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/messaging/saaj/soap/name", - "name": "name ∑727 (727)", - "data": { - "$area": 727, - "$dim": 727, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/messaging/saaj/client/p2p", - "name": "client.p2p ∑1246 (1246)", - "data": { - "$area": 1246, - "$dim": 1246, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/messaging/saaj/packaging/mime", - "name": "packaging.mime ∑10323 (112)", - "data": { - "$area": 10323, - "$dim": 10323, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/messaging/saaj/packaging/mime/util", - "name": "util ∑3076 (3076)", - "data": { - "$area": 3076, - "$dim": 3076, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/messaging/saaj/packaging/mime/internet", - "name": "internet ∑7135 (7135)", - "data": { - "$area": 7135, - "$dim": 7135, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/messaging/saaj/util", - "name": "util ∑5783 (5373)", - "data": { - "$area": 5783, - "$dim": 5783, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/messaging/saaj/util/transform", - "name": "transform ∑410 (410)", - "data": { - "$area": 410, - "$dim": 410, - "$color": "#80c080" - }}] -}] -},{ -"id": "com/sun/jmx/remote/protocol/rmi", - "name": "sun.jmx.remote.protocol.rmi ∑55 (55)", - "data": { - "$area": 55, - "$dim": 55, - "$color": "#80c080" - }},{ -"id": "com/sun/beans", - "name": "sun.beans ∑6891 (598)", - "data": { - "$area": 6891, - "$dim": 6891, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/beans/util", - "name": "util ∑818 (818)", - "data": { - "$area": 818, - "$dim": 818, - "$color": "#80c080" - }},{ -"id": "com/sun/beans/editors", - "name": "editors ∑1715 (1715)", - "data": { - "$area": 1715, - "$dim": 1715, - "$color": "#80c080" - }},{ -"id": "com/sun/beans/finder", - "name": "finder ∑1749 (1749)", - "data": { - "$area": 1749, - "$dim": 1749, - "$color": "#80c080" - }},{ -"id": "com/sun/beans/decoder", - "name": "decoder ∑1905 (1905)", - "data": { - "$area": 1905, - "$dim": 1905, - "$color": "#80c080" - }},{ -"id": "com/sun/beans/infos", - "name": "infos ∑106 (106)", - "data": { - "$area": 106, - "$dim": 106, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/management", - "name": "sun.management ∑1224 (662)", - "data": { - "$area": 1224, - "$dim": 1224, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/management/jmx", - "name": "jmx ∑562 (562)", - "data": { - "$area": 562, - "$dim": 562, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/ws/encoding", - "name": "sun.xml.internal.ws.encoding ∑8405 (6154)", - "data": { - "$area": 8405, - "$dim": 8405, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/ws/encoding/xml", - "name": "xml ∑880 (880)", - "data": { - "$area": 880, - "$dim": 880, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/encoding/policy", - "name": "policy ∑493 (493)", - "data": { - "$area": 493, - "$dim": 493, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/encoding/soap", - "name": "soap ∑308 (302)", - "data": { - "$area": 308, - "$dim": 308, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/ws/encoding/soap/streaming", - "name": "streaming ∑6 (6)", - "data": { - "$area": 6, - "$dim": 6, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/ws/encoding/fastinfoset", - "name": "fastinfoset ∑570 (570)", - "data": { - "$area": 570, - "$dim": 570, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/stream", - "name": "sun.xml.internal.stream ∑22551 (2708)", - "data": { - "$area": 22551, - "$dim": 22551, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/stream/dtd", - "name": "dtd ∑2871 (804)", - "data": { - "$area": 2871, - "$dim": 2871, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/stream/dtd/nonvalidating", - "name": "nonvalidating ∑2067 (2067)", - "data": { - "$area": 2067, - "$dim": 2067, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/stream/util", - "name": "util ∑203 (203)", - "data": { - "$area": 203, - "$dim": 203, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/stream/buffer", - "name": "buffer ∑8133 (1973)", - "data": { - "$area": 8133, - "$dim": 8133, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/stream/buffer/sax", - "name": "sax ∑1696 (1696)", - "data": { - "$area": 1696, - "$dim": 1696, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/stream/buffer/stax", - "name": "stax ∑4464 (4464)", - "data": { - "$area": 4464, - "$dim": 4464, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/stream/events", - "name": "events ∑3005 (3005)", - "data": { - "$area": 3005, - "$dim": 3005, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/stream/writers", - "name": "writers ∑5631 (5631)", - "data": { - "$area": 5631, - "$dim": 5631, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/corba/se/spi/activation", - "name": "sun.corba.se.spi.activation ∑8800 (7931)", - "data": { - "$area": 8800, - "$dim": 8800, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/corba/se/spi/activation/RepositoryPackage", - "name": "RepositoryPackage ∑378 (378)", - "data": { - "$area": 378, - "$dim": 378, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/spi/activation/LocatorPackage", - "name": "LocatorPackage ∑362 (362)", - "data": { - "$area": 362, - "$dim": 362, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/spi/activation/InitialNameServicePackage", - "name": "InitialNameServicePackage ∑129 (129)", - "data": { - "$area": 129, - "$dim": 129, - "$color": "#80c080" - }}] -},{ -"id": "com/oracle/webservices/internal/impl/encoding", - "name": "oracle.webservices.internal.impl.encoding ∑20 (20)", - "data": { - "$area": 20, - "$dim": 20, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/resources", - "name": "sun.xml.internal.ws.resources ∑6370 (6370)", - "data": { - "$area": 6370, - "$dim": 6370, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/impl/activation", - "name": "sun.corba.se.impl.activation ∑6097 (6097)", - "data": { - "$area": 6097, - "$dim": 6097, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/fault", - "name": "sun.xml.internal.ws.fault ∑1950 (1950)", - "data": { - "$area": 1950, - "$dim": 1950, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/impl/logging", - "name": "sun.corba.se.impl.logging ∑28488 (28488)", - "data": { - "$area": 28488, - "$dim": 28488, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/internal/corba", - "name": "sun.corba.se.internal.corba ∑3 (3)", - "data": { - "$area": 3, - "$dim": 3, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/config/management/policy", - "name": "sun.xml.internal.ws.config.management.policy ∑99 (99)", - "data": { - "$area": 99, - "$dim": 99, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/message", - "name": "sun.xml.internal.ws.message ∑8303 (2335)", - "data": { - "$area": 8303, - "$dim": 8303, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/ws/message/stream", - "name": "stream ∑2396 (2396)", - "data": { - "$area": 2396, - "$dim": 2396, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/message/jaxb", - "name": "jaxb ∑1568 (1568)", - "data": { - "$area": 1568, - "$dim": 1568, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/message/saaj", - "name": "saaj ∑1516 (1516)", - "data": { - "$area": 1516, - "$dim": 1516, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/message/source", - "name": "source ∑488 (488)", - "data": { - "$area": 488, - "$dim": 488, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/org/apache/xml/internal/res", - "name": "sun.org.apache.xml.internal.res ∑15741 (15741)", - "data": { - "$area": 15741, - "$dim": 15741, - "$color": "#80c080" - }},{ -"id": "com/sun/jmx/defaults", - "name": "sun.jmx.defaults ∑37 (37)", - "data": { - "$area": 37, - "$dim": 37, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xerces/internal/xinclude", - "name": "sun.org.apache.xerces.internal.xinclude ∑7433 (7433)", - "data": { - "$area": 7433, - "$dim": 7433, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/util", - "name": "sun.xml.internal.ws.util ∑10161 (5373)", - "data": { - "$area": 10161, - "$dim": 10161, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/ws/util/exception", - "name": "exception ∑313 (313)", - "data": { - "$area": 313, - "$dim": 313, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/util/xml", - "name": "xml ∑2993 (2993)", - "data": { - "$area": 2993, - "$dim": 2993, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/util/pipe", - "name": "pipe ∑1482 (1482)", - "data": { - "$area": 1482, - "$dim": 1482, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/corba/se/impl/legacy/connection", - "name": "sun.corba.se.impl.legacy.connection ∑795 (795)", - "data": { - "$area": 795, - "$dim": 795, - "$color": "#80c080" - }},{ -"id": "com/sun/jmx/interceptor", - "name": "sun.jmx.interceptor ∑2961 (2961)", - "data": { - "$area": 2961, - "$dim": 2961, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/spi/ior", - "name": "sun.corba.se.spi.ior ∑826 (292)", - "data": { - "$area": 826, - "$dim": 826, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/corba/se/spi/ior/iiop", - "name": "iiop ∑534 (534)", - "data": { - "$area": 534, - "$dim": 534, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/org/omg/CORBA", - "name": "sun.org.omg.CORBA ∑4219 (3584)", - "data": { - "$area": 4219, - "$dim": 4219, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/omg/CORBA/ValueDefPackage", - "name": "ValueDefPackage ∑635 (635)", - "data": { - "$area": 635, - "$dim": 635, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/corba/se/spi/monitoring", - "name": "sun.corba.se.spi.monitoring ∑472 (472)", - "data": { - "$area": 472, - "$dim": 472, - "$color": "#80c080" - }},{ -"id": "com/apple/laf", - "name": "apple.laf ∑78902 (65108)", - "data": { - "$area": 78902, - "$dim": 78902, - "$color": "#80c080" - },"children": [{ -"id": "com/apple/laf/resources", - "name": "resources ∑13794 (13794)", - "data": { - "$area": 13794, - "$dim": 13794, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/ws/streaming", - "name": "sun.xml.internal.ws.streaming ∑2743 (2743)", - "data": { - "$area": 2743, - "$dim": 2743, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xml/internal/utils", - "name": "sun.org.apache.xml.internal.utils ∑26978 (20693)", - "data": { - "$area": 26978, - "$dim": 26978, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xml/internal/utils/res", - "name": "res ∑6285 (6285)", - "data": { - "$area": 6285, - "$dim": 6285, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/security/auth", - "name": "sun.security.auth ∑12471 (1313)", - "data": { - "$area": 12471, - "$dim": 12471, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/security/auth/callback", - "name": "callback ∑957 (957)", - "data": { - "$area": 957, - "$dim": 957, - "$color": "#80c080" - }},{ -"id": "com/sun/security/auth/module", - "name": "module ∑10175 (10175)", - "data": { - "$area": 10175, - "$dim": 10175, - "$color": "#80c080" - }},{ -"id": "com/sun/security/auth/login", - "name": "login ∑26 (26)", - "data": { - "$area": 26, - "$dim": 26, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/org/jvnet/staxex", - "name": "sun.xml.internal.org.jvnet.staxex ∑1635 (1635)", - "data": { - "$area": 1635, - "$dim": 1635, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/protocol/xml", - "name": "sun.xml.internal.ws.protocol.xml ∑21 (21)", - "data": { - "$area": 21, - "$dim": 21, - "$color": "#80c080" - }},{ -"id": "com/sun/security/cert/internal/x509", - "name": "sun.security.cert.internal.x509 ∑202 (202)", - "data": { - "$area": 202, - "$dim": 202, - "$color": "#80c080" - }},{ -"id": "com/sun/imageio/plugins/jpeg", - "name": "sun.imageio.plugins.jpeg ∑21925 (21925)", - "data": { - "$area": 21925, - "$dim": 21925, - "$color": "#80c080" - }},{ -"id": "com/sun/imageio/plugins/bmp", - "name": "sun.imageio.plugins.bmp ∑10498 (10498)", - "data": { - "$area": 10498, - "$dim": 10498, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/impl/naming/namingutil", - "name": "sun.corba.se.impl.naming.namingutil ∑754 (754)", - "data": { - "$area": 754, - "$dim": 754, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/developer", - "name": "sun.xml.internal.ws.developer ∑789 (789)", - "data": { - "$area": 789, - "$dim": 789, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/txw2", - "name": "sun.xml.internal.txw2 ∑5950 (2941)", - "data": { - "$area": 5950, - "$dim": 5950, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/txw2/output", - "name": "output ∑3009 (3009)", - "data": { - "$area": 3009, - "$dim": 3009, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/org/jvnet/mimepull", - "name": "sun.xml.internal.org.jvnet.mimepull ∑6516 (6516)", - "data": { - "$area": 6516, - "$dim": 6516, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/spi/servicecontext", - "name": "sun.corba.se.spi.servicecontext ∑1227 (1227)", - "data": { - "$area": 1227, - "$dim": 1227, - "$color": "#80c080" - }},{ -"id": "com/sun/nio/sctp", - "name": "sun.nio.sctp ∑525 (525)", - "data": { - "$area": 525, - "$dim": 525, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/impl/copyobject", - "name": "sun.corba.se.impl.copyobject ∑155 (155)", - "data": { - "$area": 155, - "$dim": 155, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/client", - "name": "sun.xml.internal.ws.client ∑10725 (4653)", - "data": { - "$area": 10725, - "$dim": 10725, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/ws/client/dispatch", - "name": "dispatch ∑1987 (1987)", - "data": { - "$area": 1987, - "$dim": 1987, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/client/sei", - "name": "sei ∑4085 (4085)", - "data": { - "$area": 4085, - "$dim": 4085, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/jmx/mbeanserver", - "name": "sun.jmx.mbeanserver ∑11948 (11948)", - "data": { - "$area": 11948, - "$dim": 11948, - "$color": "#80c080" - }},{ -"id": "com/oracle/webservices/internal/api", - "name": "oracle.webservices.internal.api ∑1876 (78)", - "data": { - "$area": 1876, - "$dim": 1876, - "$color": "#80c080" - },"children": [{ -"id": "com/oracle/webservices/internal/api/message", - "name": "message ∑1490 (1490)", - "data": { - "$area": 1490, - "$dim": 1490, - "$color": "#80c080" - }},{ -"id": "com/oracle/webservices/internal/api/databinding", - "name": "databinding ∑308 (308)", - "data": { - "$area": 308, - "$dim": 308, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/nio/file", - "name": "sun.nio.file ∑161 (161)", - "data": { - "$area": 161, - "$dim": 161, - "$color": "#80c080" - }},{ -"id": "com/sun/imageio/plugins/gif", - "name": "sun.imageio.plugins.gif ∑9290 (9290)", - "data": { - "$area": 9290, - "$dim": 9290, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/binding", - "name": "sun.xml.internal.ws.binding ∑2057 (2057)", - "data": { - "$area": 2057, - "$dim": 2057, - "$color": "#80c080" - }},{ -"id": "com/sun/java/browser/dom", - "name": "sun.java.browser.dom ∑89 (89)", - "data": { - "$area": 89, - "$dim": 89, - "$color": "#80c080" - }},{ -"id": "com/sun/jmx/snmp", - "name": "sun.jmx.snmp ∑45554 (10300)", - "data": { - "$area": 45554, - "$dim": 45554, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/jmx/snmp/daemon", - "name": "daemon ∑12552 (12552)", - "data": { - "$area": 12552, - "$dim": 12552, - "$color": "#80c080" - }},{ -"id": "com/sun/jmx/snmp/tasks", - "name": "tasks ∑445 (445)", - "data": { - "$area": 445, - "$dim": 445, - "$color": "#80c080" - }},{ -"id": "com/sun/jmx/snmp/IPAcl", - "name": "IPAcl ∑13067 (13067)", - "data": { - "$area": 13067, - "$dim": 13067, - "$color": "#80c080" - }},{ -"id": "com/sun/jmx/snmp/defaults", - "name": "defaults ∑237 (237)", - "data": { - "$area": 237, - "$dim": 237, - "$color": "#80c080" - }},{ -"id": "com/sun/jmx/snmp/internal", - "name": "internal ∑944 (944)", - "data": { - "$area": 944, - "$dim": 944, - "$color": "#80c080" - }},{ -"id": "com/sun/jmx/snmp/agent", - "name": "agent ∑8009 (8009)", - "data": { - "$area": 8009, - "$dim": 8009, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/swing/internal/plaf/synth/resources", - "name": "sun.swing.internal.plaf.synth.resources ∑3972 (3972)", - "data": { - "$area": 3972, - "$dim": 3972, - "$color": "#80c080" - }},{ -"id": "com/oracle/util", - "name": "oracle.util ∑7 (7)", - "data": { - "$area": 7, - "$dim": 7, - "$color": "#80c080" - }},{ -"id": "com/sun/security/ntlm", - "name": "sun.security.ntlm ∑2169 (2169)", - "data": { - "$area": 2169, - "$dim": 2169, - "$color": "#80c080" - }},{ -"id": "com/oracle/nio", - "name": "oracle.nio ∑90 (90)", - "data": { - "$area": 90, - "$dim": 90, - "$color": "#80c080" - }},{ -"id": "com/sun/org/omg/SendingContext", - "name": "sun.org.omg.SendingContext ∑844 (608)", - "data": { - "$area": 844, - "$dim": 844, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/omg/SendingContext/CodeBasePackage", - "name": "CodeBasePackage ∑236 (236)", - "data": { - "$area": 236, - "$dim": 236, - "$color": "#80c080" - }}] -},{ -"id": "com/apple/eawt", - "name": "apple.eawt ∑3316 (2818)", - "data": { - "$area": 3316, - "$dim": 3316, - "$color": "#80c080" - },"children": [{ -"id": "com/apple/eawt/event", - "name": "event ∑498 (498)", - "data": { - "$area": 498, - "$dim": 498, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/rmi/rmid", - "name": "sun.rmi.rmid ∑468 (468)", - "data": { - "$area": 468, - "$dim": 468, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/spi/orb", - "name": "sun.corba.se.spi.orb ∑1922 (1922)", - "data": { - "$area": 1922, - "$dim": 1922, - "$color": "#80c080" - }},{ -"id": "com/sun/jndi/toolkit/corba", - "name": "sun.jndi.toolkit.corba ∑317 (317)", - "data": { - "$area": 317, - "$dim": 317, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/assembler", - "name": "sun.xml.internal.ws.assembler ∑2128 (1878)", - "data": { - "$area": 2128, - "$dim": 2128, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/ws/assembler/jaxws", - "name": "jaxws ∑92 (92)", - "data": { - "$area": 92, - "$dim": 92, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/assembler/dev", - "name": "dev ∑158 (158)", - "data": { - "$area": 158, - "$dim": 158, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/corba/se/impl/naming/cosnaming", - "name": "sun.corba.se.impl.naming.cosnaming ∑2939 (2939)", - "data": { - "$area": 2939, - "$dim": 2939, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/server", - "name": "sun.xml.internal.ws.server ∑9622 (5798)", - "data": { - "$area": 9622, - "$dim": 9622, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/ws/server/provider", - "name": "provider ∑1033 (1033)", - "data": { - "$area": 1033, - "$dim": 1033, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/server/sei", - "name": "sei ∑2791 (2791)", - "data": { - "$area": 2791, - "$dim": 2791, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/fastinfoset", - "name": "sun.xml.internal.fastinfoset ∑48315 (12317)", - "data": { - "$area": 48315, - "$dim": 48315, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/fastinfoset/alphabet", - "name": "alphabet ∑17 (17)", - "data": { - "$area": 17, - "$dim": 17, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/fastinfoset/tools", - "name": "tools ∑2820 (2820)", - "data": { - "$area": 2820, - "$dim": 2820, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/fastinfoset/util", - "name": "util ∑5098 (5098)", - "data": { - "$area": 5098, - "$dim": 5098, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/fastinfoset/sax", - "name": "sax ∑6380 (6380)", - "data": { - "$area": 6380, - "$dim": 6380, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/fastinfoset/dom", - "name": "dom ∑2997 (2997)", - "data": { - "$area": 2997, - "$dim": 2997, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/fastinfoset/stax", - "name": "stax ∑9530 (5788)", - "data": { - "$area": 9530, - "$dim": 9530, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/fastinfoset/stax/events", - "name": "events ∑2596 (2596)", - "data": { - "$area": 2596, - "$dim": 2596, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/fastinfoset/stax/factory", - "name": "factory ∑886 (886)", - "data": { - "$area": 886, - "$dim": 886, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/fastinfoset/stax/util", - "name": "util ∑260 (260)", - "data": { - "$area": 260, - "$dim": 260, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/fastinfoset/algorithm", - "name": "algorithm ∑4785 (4785)", - "data": { - "$area": 4785, - "$dim": 4785, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/fastinfoset/org/apache/xerces/util", - "name": "org.apache.xerces.util ∑3288 (3288)", - "data": { - "$area": 3288, - "$dim": 3288, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/fastinfoset/vocab", - "name": "vocab ∑1083 (1083)", - "data": { - "$area": 1083, - "$dim": 1083, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/jndi/url/dns", - "name": "sun.jndi.url.dns ∑133 (133)", - "data": { - "$area": 133, - "$dim": 133, - "$color": "#80c080" - }},{ -"id": "com/sun/org/glassfish/external/arc", - "name": "sun.org.glassfish.external.arc ∑101 (101)", - "data": { - "$area": 101, - "$dim": 101, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/internal/Interceptors", - "name": "sun.corba.se.internal.Interceptors ∑3 (3)", - "data": { - "$area": 3, - "$dim": 3, - "$color": "#80c080" - }},{ -"id": "com/apple/concurrent", - "name": "apple.concurrent ∑434 (434)", - "data": { - "$area": 434, - "$dim": 434, - "$color": "#80c080" - }},{ -"id": "com/sun/istack/internal", - "name": "sun.istack.internal ∑1740 (722)", - "data": { - "$area": 1740, - "$dim": 1740, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/istack/internal/localization", - "name": "localization ∑263 (263)", - "data": { - "$area": 263, - "$dim": 263, - "$color": "#80c080" - }},{ -"id": "com/sun/istack/internal/logging", - "name": "logging ∑755 (755)", - "data": { - "$area": 755, - "$dim": 755, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/ws/model", - "name": "sun.xml.internal.ws.model ∑13218 (10496)", - "data": { - "$area": 13218, - "$dim": 13218, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/ws/model/soap", - "name": "soap ∑34 (34)", - "data": { - "$area": 34, - "$dim": 34, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/model/wsdl", - "name": "wsdl ∑2688 (2688)", - "data": { - "$area": 2688, - "$dim": 2688, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/org/apache/bcel/internal", - "name": "sun.org.apache.bcel.internal ∑43761 (6253)", - "data": { - "$area": 43761, - "$dim": 43761, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/bcel/internal/generic", - "name": "generic ∑18557 (18557)", - "data": { - "$area": 18557, - "$dim": 18557, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/bcel/internal/classfile", - "name": "classfile ∑10843 (10843)", - "data": { - "$area": 10843, - "$dim": 10843, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/bcel/internal/util", - "name": "util ∑8108 (8108)", - "data": { - "$area": 8108, - "$dim": 8108, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/org/apache/xerces/internal/xpointer", - "name": "sun.org.apache.xerces.internal.xpointer ∑3990 (3990)", - "data": { - "$area": 3990, - "$dim": 3990, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xerces/internal/impl", - "name": "sun.org.apache.xerces.internal.impl ∑155303 (34430)", - "data": { - "$area": 155303, - "$dim": 155303, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xerces/internal/impl/io", - "name": "io ∑2015 (2015)", - "data": { - "$area": 2015, - "$dim": 2015, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xerces/internal/impl/xs", - "name": "xs ∑61207 (23878)", - "data": { - "$area": 61207, - "$dim": 61207, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xerces/internal/impl/xs/identity", - "name": "identity ∑1569 (1569)", - "data": { - "$area": 1569, - "$dim": 1569, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xerces/internal/impl/xs/models", - "name": "models ∑3532 (3532)", - "data": { - "$area": 3532, - "$dim": 3532, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xerces/internal/impl/xs/util", - "name": "util ∑1924 (1924)", - "data": { - "$area": 1924, - "$dim": 1924, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xerces/internal/impl/xs/traversers", - "name": "traversers ∑26183 (26183)", - "data": { - "$area": 26183, - "$dim": 26183, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xerces/internal/impl/xs/opti", - "name": "opti ∑4121 (4121)", - "data": { - "$area": 4121, - "$dim": 4121, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/org/apache/xerces/internal/impl/msg", - "name": "msg ∑1298 (1298)", - "data": { - "$area": 1298, - "$dim": 1298, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xerces/internal/impl/validation", - "name": "validation ∑289 (289)", - "data": { - "$area": 289, - "$dim": 289, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xerces/internal/impl/xpath", - "name": "xpath ∑20044 (4026)", - "data": { - "$area": 20044, - "$dim": 20044, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xerces/internal/impl/xpath/regex", - "name": "regex ∑16018 (16018)", - "data": { - "$area": 16018, - "$dim": 16018, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/org/apache/xerces/internal/impl/dtd", - "name": "dtd ∑14952 (12506)", - "data": { - "$area": 14952, - "$dim": 14952, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xerces/internal/impl/dtd/models", - "name": "models ∑2446 (2446)", - "data": { - "$area": 2446, - "$dim": 2446, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/org/apache/xerces/internal/impl/dv", - "name": "dv ∑21068 (217)", - "data": { - "$area": 21068, - "$dim": 21068, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xerces/internal/impl/dv/util", - "name": "util ∑1180 (1180)", - "data": { - "$area": 1180, - "$dim": 1180, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xerces/internal/impl/dv/xs", - "name": "xs ∑19213 (19213)", - "data": { - "$area": 19213, - "$dim": 19213, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xerces/internal/impl/dv/dtd", - "name": "dtd ∑458 (458)", - "data": { - "$area": 458, - "$dim": 458, - "$color": "#80c080" - }}] -}] -},{ -"id": "com/sun/demo/jvmti/hprof", - "name": "sun.demo.jvmti.hprof ∑74 (74)", - "data": { - "$area": 74, - "$dim": 74, - "$color": "#80c080" - }},{ -"id": "com/sun/swing/internal/plaf/metal/resources", - "name": "sun.swing.internal.plaf.metal.resources ∑4908 (4908)", - "data": { - "$area": 4908, - "$dim": 4908, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/handler", - "name": "sun.xml.internal.ws.handler ∑4457 (4457)", - "data": { - "$area": 4457, - "$dim": 4457, - "$color": "#80c080" - }},{ -"id": "com/sun/accessibility/internal/resources", - "name": "sun.accessibility.internal.resources ∑16627 (16627)", - "data": { - "$area": 16627, - "$dim": 16627, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/spi/legacy/connection", - "name": "sun.corba.se.spi.legacy.connection ∑9 (9)", - "data": { - "$area": 9, - "$dim": 9, - "$color": "#80c080" - }},{ -"id": "com/sun/org/glassfish/gmbal", - "name": "sun.org.glassfish.gmbal ∑922 (775)", - "data": { - "$area": 922, - "$dim": 922, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/glassfish/gmbal/util", - "name": "util ∑147 (147)", - "data": { - "$area": 147, - "$dim": 147, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/ws/config/metro/util", - "name": "sun.xml.internal.ws.config.metro.util ∑35 (35)", - "data": { - "$area": 35, - "$dim": 35, - "$color": "#80c080" - }},{ -"id": "com/sun/jndi/dns", - "name": "sun.jndi.dns ∑6659 (6659)", - "data": { - "$area": 6659, - "$dim": 6659, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/impl/interceptors", - "name": "sun.corba.se.impl.interceptors ∑6463 (6463)", - "data": { - "$area": 6463, - "$dim": 6463, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xerces/internal/xni", - "name": "sun.org.apache.xerces.internal.xni ∑738 (398)", - "data": { - "$area": 738, - "$dim": 738, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xerces/internal/xni/parser", - "name": "parser ∑340 (340)", - "data": { - "$area": 340, - "$dim": 340, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/ws/commons/xmlutil", - "name": "sun.xml.internal.ws.commons.xmlutil ∑281 (281)", - "data": { - "$area": 281, - "$dim": 281, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/internal/POA", - "name": "sun.corba.se.internal.POA ∑3 (3)", - "data": { - "$area": 3, - "$dim": 3, - "$color": "#80c080" - }},{ -"id": "com/sun/java/browser/net", - "name": "sun.java.browser.net ∑30 (30)", - "data": { - "$area": 30, - "$dim": 30, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/impl/presentation/rmi", - "name": "sun.corba.se.impl.presentation.rmi ∑5414 (5414)", - "data": { - "$area": 5414, - "$dim": 5414, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/bind", - "name": "sun.xml.internal.bind ∑63805 (2365)", - "data": { - "$area": 63805, - "$dim": 63805, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/bind/marshaller", - "name": "marshaller ∑1341 (1341)", - "data": { - "$area": 1341, - "$dim": 1341, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/bind/api", - "name": "api ∑1770 (749)", - "data": { - "$area": 1770, - "$dim": 1770, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/bind/api/impl", - "name": "impl ∑1021 (1021)", - "data": { - "$area": 1021, - "$dim": 1021, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/bind/util", - "name": "util ∑966 (966)", - "data": { - "$area": 966, - "$dim": 966, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/bind/unmarshaller", - "name": "unmarshaller ∑493 (493)", - "data": { - "$area": 493, - "$dim": 493, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/bind/v2", - "name": "v2 ∑56870 (1043)", - "data": { - "$area": 56870, - "$dim": 56870, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/bind/v2/model/annotation", - "name": "model.annotation ∑1268 (1268)", - "data": { - "$area": 1268, - "$dim": 1268, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/bind/v2/model/core", - "name": "model.core ∑346 (346)", - "data": { - "$area": 346, - "$dim": 346, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/bind/v2/model/runtime", - "name": "model.runtime ∑73 (73)", - "data": { - "$area": 73, - "$dim": 73, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/bind/v2/util", - "name": "util ∑2079 (2079)", - "data": { - "$area": 2079, - "$dim": 2079, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/bind/v2/model/impl", - "name": "model.impl ∑13523 (13523)", - "data": { - "$area": 13523, - "$dim": 13523, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/bind/v2/runtime", - "name": "runtime ∑32187 (10657)", - "data": { - "$area": 32187, - "$dim": 32187, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/bind/v2/runtime/reflect", - "name": "reflect ∑5984 (3598)", - "data": { - "$area": 5984, - "$dim": 5984, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/bind/v2/runtime/reflect/opt", - "name": "opt ∑2386 (2386)", - "data": { - "$area": 2386, - "$dim": 2386, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/bind/v2/runtime/output", - "name": "output ∑4738 (4738)", - "data": { - "$area": 4738, - "$dim": 4738, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/bind/v2/runtime/property", - "name": "property ∑3166 (3166)", - "data": { - "$area": 3166, - "$dim": 3166, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/bind/v2/runtime/unmarshaller", - "name": "unmarshaller ∑7642 (7642)", - "data": { - "$area": 7642, - "$dim": 7642, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/bind/v2/bytecode", - "name": "bytecode ∑329 (329)", - "data": { - "$area": 329, - "$dim": 329, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/bind/v2/model/nav", - "name": "model.nav ∑1792 (1792)", - "data": { - "$area": 1792, - "$dim": 1792, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/bind/v2/schemagen", - "name": "schemagen ∑4200 (4200)", - "data": { - "$area": 4200, - "$dim": 4200, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/bind/v2/model/util", - "name": "model.util ∑30 (30)", - "data": { - "$area": 30, - "$dim": 30, - "$color": "#80c080" - }}] -}] -},{ -"id": "com/sun/xml/internal/ws/db", - "name": "sun.xml.internal.ws.db ∑1898 (943)", - "data": { - "$area": 1898, - "$dim": 1898, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/ws/db/glassfish", - "name": "glassfish ∑955 (955)", - "data": { - "$area": 955, - "$dim": 955, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/org/apache/xerces/internal/jaxp", - "name": "sun.org.apache.xerces.internal.jaxp ∑17751 (3699)", - "data": { - "$area": 17751, - "$dim": 17751, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xerces/internal/jaxp/validation", - "name": "validation ∑7146 (7146)", - "data": { - "$area": 7146, - "$dim": 7146, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/xerces/internal/jaxp/datatype", - "name": "datatype ∑6906 (6906)", - "data": { - "$area": 6906, - "$dim": 6906, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/corba/se/spi/legacy/interceptor", - "name": "sun.corba.se.spi.legacy.interceptor ∑7 (7)", - "data": { - "$area": 7, - "$dim": 7, - "$color": "#80c080" - }},{ -"id": "com/sun/jmx/remote/util", - "name": "sun.jmx.remote.util ∑1385 (1385)", - "data": { - "$area": 1385, - "$dim": 1385, - "$color": "#80c080" - }},{ -"id": "com/sun/rowset", - "name": "sun.rowset ∑23043 (14710)", - "data": { - "$area": 23043, - "$dim": 23043, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/rowset/providers", - "name": "providers ∑160 (160)", - "data": { - "$area": 160, - "$dim": 160, - "$color": "#80c080" - }},{ -"id": "com/sun/rowset/internal", - "name": "internal ∑8173 (8173)", - "data": { - "$area": 8173, - "$dim": 8173, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/imageio/plugins/common", - "name": "sun.imageio.plugins.common ∑6924 (6924)", - "data": { - "$area": 6924, - "$dim": 6924, - "$color": "#80c080" - }},{ -"id": "com/sun/jndi/toolkit/dir", - "name": "sun.jndi.toolkit.dir ∑3342 (3342)", - "data": { - "$area": 3342, - "$dim": 3342, - "$color": "#80c080" - }},{ -"id": "com/sun/org/apache/regexp/internal", - "name": "sun.org.apache.regexp.internal ∑7428 (7428)", - "data": { - "$area": 7428, - "$dim": 7428, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/impl/transport", - "name": "sun.corba.se.impl.transport ∑8327 (8327)", - "data": { - "$area": 8327, - "$dim": 8327, - "$color": "#80c080" - }},{ -"id": "com/sun/activation/registries", - "name": "sun.activation.registries ∑1988 (1988)", - "data": { - "$area": 1988, - "$dim": 1988, - "$color": "#80c080" - }},{ -"id": "com/sun/jmx/remote/security", - "name": "sun.jmx.remote.security ∑2573 (2573)", - "data": { - "$area": 2573, - "$dim": 2573, - "$color": "#80c080" - }},{ -"id": "com/apple/eio", - "name": "apple.eio ∑284 (284)", - "data": { - "$area": 284, - "$dim": 284, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/addressing", - "name": "sun.xml.internal.ws.addressing ∑5447 (4330)", - "data": { - "$area": 5447, - "$dim": 5447, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/ws/addressing/v200408", - "name": "v200408 ∑393 (393)", - "data": { - "$area": 393, - "$dim": 393, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/addressing/policy", - "name": "policy ∑673 (673)", - "data": { - "$area": 673, - "$dim": 673, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/addressing/model", - "name": "model ∑51 (51)", - "data": { - "$area": 51, - "$dim": 51, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/org/apache/xml/internal/serialize", - "name": "sun.org.apache.xml.internal.serialize ∑12983 (12983)", - "data": { - "$area": 12983, - "$dim": 12983, - "$color": "#80c080" - }},{ -"id": "com/sun/imageio/plugins/png", - "name": "sun.imageio.plugins.png ∑14823 (14823)", - "data": { - "$area": 14823, - "$dim": 14823, - "$color": "#80c080" - }},{ -"id": "com/sun/swing/internal/plaf/basic/resources", - "name": "sun.swing.internal.plaf.basic.resources ∑16452 (16452)", - "data": { - "$area": 16452, - "$dim": 16452, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/impl/resolver", - "name": "sun.corba.se.impl.resolver ∑914 (914)", - "data": { - "$area": 914, - "$dim": 914, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/impl/io", - "name": "sun.corba.se.impl.io ∑11771 (11771)", - "data": { - "$area": 11771, - "$dim": 11771, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/impl/javax/rmi", - "name": "sun.corba.se.impl.javax.rmi ∑1370 (307)", - "data": { - "$area": 1370, - "$dim": 1370, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/corba/se/impl/javax/rmi/CORBA", - "name": "CORBA ∑1063 (1063)", - "data": { - "$area": 1063, - "$dim": 1063, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/org/apache/xerces/internal/util", - "name": "sun.org.apache.xerces.internal.util ∑20731 (20731)", - "data": { - "$area": 20731, - "$dim": 20731, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/spi/resolver", - "name": "sun.corba.se.spi.resolver ∑50 (50)", - "data": { - "$area": 50, - "$dim": 50, - "$color": "#80c080" - }},{ -"id": "com/sun/naming/internal", - "name": "sun.naming.internal ∑1441 (1441)", - "data": { - "$area": 1441, - "$dim": 1441, - "$color": "#80c080" - }},{ -"id": "com/sun/org/glassfish/external/probe/provider", - "name": "sun.org.glassfish.external.probe.provider ∑229 (229)", - "data": { - "$area": 229, - "$dim": 229, - "$color": "#80c080" - }},{ -"id": "com/sun/security/sasl", - "name": "sun.security.sasl ∑10016 (1396)", - "data": { - "$area": 10016, - "$dim": 10016, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/security/sasl/gsskerb", - "name": "gsskerb ∑1297 (1297)", - "data": { - "$area": 1297, - "$dim": 1297, - "$color": "#80c080" - }},{ -"id": "com/sun/security/sasl/ntlm", - "name": "ntlm ∑640 (640)", - "data": { - "$area": 640, - "$dim": 640, - "$color": "#80c080" - }},{ -"id": "com/sun/security/sasl/digest", - "name": "digest ∑5855 (5855)", - "data": { - "$area": 5855, - "$dim": 5855, - "$color": "#80c080" - }},{ -"id": "com/sun/security/sasl/util", - "name": "util ∑828 (828)", - "data": { - "$area": 828, - "$dim": 828, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/jndi/url/ldap", - "name": "sun.jndi.url.ldap ∑1007 (1007)", - "data": { - "$area": 1007, - "$dim": 1007, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/spi/copyobject", - "name": "sun.corba.se.spi.copyobject ∑96 (96)", - "data": { - "$area": 96, - "$dim": 96, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/dump", - "name": "sun.xml.internal.ws.dump ∑678 (678)", - "data": { - "$area": 678, - "$dim": 678, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/protocol/soap", - "name": "sun.xml.internal.ws.protocol.soap ∑371 (371)", - "data": { - "$area": 371, - "$dim": 371, - "$color": "#80c080" - }},{ -"id": "com/sun/jndi/toolkit/ctx", - "name": "sun.jndi.toolkit.ctx ∑4389 (4389)", - "data": { - "$area": 4389, - "$dim": 4389, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/spi/protocol", - "name": "sun.corba.se.spi.protocol ∑230 (230)", - "data": { - "$area": 230, - "$dim": 230, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/org/omg/CORBA", - "name": "sun.corba.se.org.omg.CORBA ∑7 (7)", - "data": { - "$area": 7, - "$dim": 7, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/spi/transport", - "name": "sun.corba.se.spi.transport ∑57 (57)", - "data": { - "$area": 57, - "$dim": 57, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/spi/extension", - "name": "sun.corba.se.spi.extension ∑196 (196)", - "data": { - "$area": 196, - "$dim": 196, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/spi/presentation/rmi", - "name": "sun.corba.se.spi.presentation.rmi ∑253 (253)", - "data": { - "$area": 253, - "$dim": 253, - "$color": "#80c080" - }},{ -"id": "com/sun/imageio/stream", - "name": "sun.imageio.stream ∑235 (235)", - "data": { - "$area": 235, - "$dim": 235, - "$color": "#80c080" - }},{ -"id": "com/sun/awt", - "name": "sun.awt ∑353 (353)", - "data": { - "$area": 353, - "$dim": 353, - "$color": "#80c080" - }},{ -"id": "com/sun/jmx/remote/protocol/iiop", - "name": "sun.jmx.remote.protocol.iiop ∑417 (417)", - "data": { - "$area": 417, - "$dim": 417, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/impl/oa", - "name": "sun.corba.se.impl.oa ∑8045 (9)", - "data": { - "$area": 8045, - "$dim": 8045, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/corba/se/impl/oa/poa", - "name": "poa ∑7333 (7333)", - "data": { - "$area": 7333, - "$dim": 7333, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/impl/oa/toa", - "name": "toa ∑703 (703)", - "data": { - "$area": 703, - "$dim": 703, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/java_cup/internal/runtime", - "name": "sun.java_cup.internal.runtime ∑1745 (1745)", - "data": { - "$area": 1745, - "$dim": 1745, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/api", - "name": "sun.xml.internal.ws.api ∑22016 (1443)", - "data": { - "$area": 22016, - "$dim": 22016, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/ws/api/model", - "name": "model ∑526 (253)", - "data": { - "$area": 526, - "$dim": 526, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/ws/api/model/soap", - "name": "soap ∑51 (51)", - "data": { - "$area": 51, - "$dim": 51, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/api/model/wsdl", - "name": "wsdl ∑222 (117)", - "data": { - "$area": 222, - "$dim": 222, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/ws/api/model/wsdl/editable", - "name": "editable ∑105 (105)", - "data": { - "$area": 105, - "$dim": 105, - "$color": "#80c080" - }}] -}] -},{ -"id": "com/sun/xml/internal/ws/api/client", - "name": "client ∑207 (207)", - "data": { - "$area": 207, - "$dim": 207, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/api/policy", - "name": "policy ∑723 (281)", - "data": { - "$area": 723, - "$dim": 723, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/ws/api/policy/subject", - "name": "subject ∑442 (442)", - "data": { - "$area": 442, - "$dim": 442, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/ws/api/pipe", - "name": "pipe ∑4482 (4146)", - "data": { - "$area": 4482, - "$dim": 4482, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/ws/api/pipe/helper", - "name": "helper ∑336 (336)", - "data": { - "$area": 336, - "$dim": 336, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/ws/api/config/management", - "name": "config.management ∑893 (27)", - "data": { - "$area": 893, - "$dim": 893, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/ws/api/config/management/policy", - "name": "policy ∑866 (866)", - "data": { - "$area": 866, - "$dim": 866, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/ws/api/message", - "name": "message ∑6375 (4715)", - "data": { - "$area": 6375, - "$dim": 6375, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/ws/api/message/stream", - "name": "stream ∑56 (56)", - "data": { - "$area": 56, - "$dim": 56, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/api/message/saaj", - "name": "saaj ∑1604 (1604)", - "data": { - "$area": 1604, - "$dim": 1604, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/ws/api/ha", - "name": "ha ∑21 (21)", - "data": { - "$area": 21, - "$dim": 21, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/api/wsdl/writer", - "name": "wsdl.writer ∑55 (55)", - "data": { - "$area": 55, - "$dim": 55, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/api/databinding", - "name": "databinding ∑385 (385)", - "data": { - "$area": 385, - "$dim": 385, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/api/wsdl/parser", - "name": "wsdl.parser ∑98 (98)", - "data": { - "$area": 98, - "$dim": 98, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/api/server", - "name": "server ∑1651 (1651)", - "data": { - "$area": 1651, - "$dim": 1651, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/api/streaming", - "name": "streaming ∑1332 (1332)", - "data": { - "$area": 1332, - "$dim": 1332, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/api/fastinfoset", - "name": "fastinfoset ∑14 (14)", - "data": { - "$area": 14, - "$dim": 14, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/api/addressing", - "name": "addressing ∑3811 (3811)", - "data": { - "$area": 3811, - "$dim": 3811, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/org/apache/xerces/internal/dom", - "name": "sun.org.apache.xerces.internal.dom ∑30294 (30177)", - "data": { - "$area": 30294, - "$dim": 30294, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/org/apache/xerces/internal/dom/events", - "name": "events ∑117 (117)", - "data": { - "$area": 117, - "$dim": 117, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/java/swing", - "name": "sun.java.swing ∑108100 (252)", - "data": { - "$area": 108100, - "$dim": 108100, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/java/swing/plaf/motif", - "name": "plaf.motif ∑25902 (22866)", - "data": { - "$area": 25902, - "$dim": 25902, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/java/swing/plaf/motif/resources", - "name": "resources ∑3036 (3036)", - "data": { - "$area": 3036, - "$dim": 3036, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/java/swing/plaf/nimbus", - "name": "plaf.nimbus ∑6 (6)", - "data": { - "$area": 6, - "$dim": 6, - "$color": "#80c080" - }},{ -"id": "com/sun/java/swing/plaf/windows", - "name": "plaf.windows ∑37905 (33621)", - "data": { - "$area": 37905, - "$dim": 37905, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/java/swing/plaf/windows/resources", - "name": "resources ∑4284 (4284)", - "data": { - "$area": 4284, - "$dim": 4284, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/java/swing/plaf/gtk", - "name": "plaf.gtk ∑44035 (39283)", - "data": { - "$area": 44035, - "$dim": 44035, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/java/swing/plaf/gtk/resources", - "name": "resources ∑4752 (4752)", - "data": { - "$area": 4752, - "$dim": 4752, - "$color": "#80c080" - }}] -}] -},{ -"id": "com/sun/corba/se/impl/orb", - "name": "sun.corba.se.impl.orb ∑7736 (7736)", - "data": { - "$area": 7736, - "$dim": 7736, - "$color": "#80c080" - }},{ -"id": "com/sun/jndi/url/corbaname", - "name": "sun.jndi.url.corbaname ∑3 (3)", - "data": { - "$area": 3, - "$dim": 3, - "$color": "#80c080" - }},{ -"id": "com/sun/jndi/rmi/registry", - "name": "sun.jndi.rmi.registry ∑1087 (1087)", - "data": { - "$area": 1087, - "$dim": 1087, - "$color": "#80c080" - }},{ -"id": "com/sun/org/glassfish/external/amx", - "name": "sun.org.glassfish.external.amx ∑711 (711)", - "data": { - "$area": 711, - "$dim": 711, - "$color": "#80c080" - }},{ -"id": "com/sun/org/glassfish/external/statistics/impl", - "name": "sun.org.glassfish.external.statistics.impl ∑1618 (1618)", - "data": { - "$area": 1618, - "$dim": 1618, - "$color": "#80c080" - }},{ -"id": "com/sun/jndi/url/iiop", - "name": "sun.jndi.url.iiop ∑137 (137)", - "data": { - "$area": 137, - "$dim": 137, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/runtime/config", - "name": "sun.xml.internal.ws.runtime.config ∑476 (476)", - "data": { - "$area": 476, - "$dim": 476, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/transport", - "name": "sun.xml.internal.ws.transport ∑7369 (280)", - "data": { - "$area": 7369, - "$dim": 7369, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/ws/transport/http", - "name": "http ∑7089 (3219)", - "data": { - "$area": 7089, - "$dim": 7089, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/ws/transport/http/server", - "name": "server ∑2438 (2438)", - "data": { - "$area": 2438, - "$dim": 2438, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/transport/http/client", - "name": "client ∑1432 (1432)", - "data": { - "$area": 1432, - "$dim": 1432, - "$color": "#80c080" - }}] -}] -},{ -"id": "com/sun/corba/se/impl/naming/pcosnaming", - "name": "sun.corba.se.impl.naming.pcosnaming ∑2224 (2224)", - "data": { - "$area": 2224, - "$dim": 2224, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/impl/protocol", - "name": "sun.corba.se.impl.protocol ∑14425 (8997)", - "data": { - "$area": 14425, - "$dim": 14425, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/corba/se/impl/protocol/giopmsgheaders", - "name": "giopmsgheaders ∑5428 (5428)", - "data": { - "$area": 5428, - "$dim": 5428, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/corba/se/impl/monitoring", - "name": "sun.corba.se.impl.monitoring ∑336 (336)", - "data": { - "$area": 336, - "$dim": 336, - "$color": "#80c080" - }},{ -"id": "com/sun/net/ssl", - "name": "sun.net.ssl ∑1844 (1348)", - "data": { - "$area": 1844, - "$dim": 1844, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/net/ssl/internal/www/protocol/https", - "name": "internal.www.protocol.https ∑496 (496)", - "data": { - "$area": 496, - "$dim": 496, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/org/apache/xerces/internal/parsers", - "name": "sun.org.apache.xerces.internal.parsers ∑18281 (18281)", - "data": { - "$area": 18281, - "$dim": 18281, - "$color": "#80c080" - }},{ -"id": "com/sun/security/jgss", - "name": "sun.security.jgss ∑113 (113)", - "data": { - "$area": 113, - "$dim": 113, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/spi/oa", - "name": "sun.corba.se.spi.oa ∑240 (240)", - "data": { - "$area": 240, - "$dim": 240, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/impl/corba", - "name": "sun.corba.se.impl.corba ∑7589 (7589)", - "data": { - "$area": 7589, - "$dim": 7589, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/org/objectweb/asm", - "name": "sun.xml.internal.ws.org.objectweb.asm ∑16180 (16180)", - "data": { - "$area": 16180, - "$dim": 16180, - "$color": "#80c080" - }},{ -"id": "com/sun/corba/se/internal/iiop", - "name": "sun.corba.se.internal.iiop ∑3 (3)", - "data": { - "$area": 3, - "$dim": 3, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/policy", - "name": "sun.xml.internal.ws.policy ∑18669 (4995)", - "data": { - "$area": 18669, - "$dim": 18669, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/ws/policy/sourcemodel", - "name": "sourcemodel ∑5522 (4603)", - "data": { - "$area": 5522, - "$dim": 5522, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/ws/policy/sourcemodel/wspolicy", - "name": "wspolicy ∑455 (455)", - "data": { - "$area": 455, - "$dim": 455, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/policy/sourcemodel/attach", - "name": "attach ∑464 (464)", - "data": { - "$area": 464, - "$dim": 464, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/xml/internal/ws/policy/subject", - "name": "subject ∑490 (490)", - "data": { - "$area": 490, - "$dim": 490, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/policy/jaxws", - "name": "jaxws ∑4745 (4745)", - "data": { - "$area": 4745, - "$dim": 4745, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/policy/privateutil", - "name": "privateutil ∑2710 (2710)", - "data": { - "$area": 2710, - "$dim": 2710, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/ws/policy/spi", - "name": "spi ∑207 (207)", - "data": { - "$area": 207, - "$dim": 207, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/corba/se/impl/util", - "name": "sun.corba.se.impl.util ∑5159 (5159)", - "data": { - "$area": 5159, - "$dim": 5159, - "$color": "#80c080" - }},{ -"id": "com/sun/jndi/cosnaming", - "name": "sun.jndi.cosnaming ∑3330 (3330)", - "data": { - "$area": 3330, - "$dim": 3330, - "$color": "#80c080" - }},{ -"id": "com/sun/jmx/remote/internal", - "name": "sun.jmx.remote.internal ∑5301 (5301)", - "data": { - "$area": 5301, - "$dim": 5301, - "$color": "#80c080" - }},{ -"id": "com/sun/xml/internal/org/jvnet/fastinfoset", - "name": "sun.xml.internal.org.jvnet.fastinfoset ∑1332 (185)", - "data": { - "$area": 1332, - "$dim": 1332, - "$color": "#80c080" - },"children": [{ -"id": "com/sun/xml/internal/org/jvnet/fastinfoset/sax/helpers", - "name": "sax.helpers ∑1147 (1147)", - "data": { - "$area": 1147, - "$dim": 1147, - "$color": "#80c080" - }}] -},{ -"id": "com/sun/imageio/plugins/wbmp", - "name": "sun.imageio.plugins.wbmp ∑1670 (1670)", - "data": { - "$area": 1670, - "$dim": 1670, - "$color": "#80c080" - }}] -}] - - }; - // end - // init Icicle - icicle = new $jit.Icicle({ - // id of the visualization container - injectInto: 'infovis', - // whether to add transition animations - animate: animate, - // nodes offset - offset: 1, - // whether to add cushion type nodes - cushion: false, - //show only three levels at a time - constrained: true, - levelsToShow: 3, - // enable tips - Tips: { - enable: true, - type: 'Native', - // add positioning offsets - offsetX: 20, - offsetY: 20, - // implement the onShow method to - // add content to the tooltip when a node - // is hovered - onShow: function(tip, node){ - // count children - var count = 0; - node.eachSubnode(function(){ - count++; - }); - // add tooltip info - tip.innerHTML = "
Name: " + node.name - + "
" + count + " children
"; - } - }, - // Add events to nodes - Events: { - enable: true, - onMouseEnter: function(node) { - //add border and replot node - node.setData('border', '#33dddd'); - icicle.fx.plotNode(node, icicle.canvas); - icicle.labels.plotLabel(icicle.canvas, node, icicle.controller); - }, - onMouseLeave: function(node) { - node.removeData('border'); - icicle.fx.plot(); - }, - onClick: function(node){ - if (node) { - //hide tips and selections - icicle.tips.hide(); - if(icicle.events.hovered) - this.onMouseLeave(icicle.events.hovered); - //perform the enter animation - icicle.enter(node); - } - }, - onRightClick: function(){ - //hide tips and selections - icicle.tips.hide(); - if(icicle.events.hovered) - this.onMouseLeave(icicle.events.hovered); - //perform the out animation - icicle.out(); - } - }, - // Add canvas label styling - Label: { - type: labelType // "Native" or "HTML" - }, - // Add the name of the node in the corresponding label - // This method is called once, on label creation and only for DOM and not - // Native labels. - onCreateLabel: function(domElement, node){ - domElement.innerHTML = node.name; - var style = domElement.style; - style.fontSize = '0.9em'; - style.display = ''; - style.cursor = 'pointer'; - style.color = '#333'; - style.overflow = 'hidden'; - }, - // Change some label dom properties. - // This method is called each time a label is plotted. - onPlaceLabel: function(domElement, node){ - var style = domElement.style, - width = node.getData('width'), - height = node.getData('height'); - if(width < 7 || height < 7) { - style.display = 'none'; - } else { - style.display = ''; - style.width = width + 'px'; - style.height = height + 'px'; - } - } - }); - // load data - icicle.loadJSON(json); - // compute positions and plot - icicle.refresh(); - //end -} - -//init controls -function controls() { - var jit = $jit; - var gotoparent = jit.id('update'); - jit.util.addEvent(gotoparent, 'click', function() { - icicle.out(); - }); - var select = jit.id('s-orientation'); - jit.util.addEvent(select, 'change', function () { - icicle.layout.orientation = select[select.selectedIndex].value; - icicle.refresh(); - }); - var levelsToShowSelect = jit.id('i-levels-to-show'); - jit.util.addEvent(levelsToShowSelect, 'change', function () { - var index = levelsToShowSelect.selectedIndex; - if(index == 0) { - icicle.config.constrained = false; - } else { - icicle.config.constrained = true; - icicle.config.levelsToShow = index; - } - icicle.refresh(); - }); -} -//end diff --git a/OPAL/av/src/main/scala/org/opalj/av/viz/base.css b/OPAL/av/src/main/scala/org/opalj/av/viz/base.css deleted file mode 100644 index 3902c5b242..0000000000 --- a/OPAL/av/src/main/scala/org/opalj/av/viz/base.css +++ /dev/null @@ -1,123 +0,0 @@ -html, body { - margin:0; - padding:0; - font-family: "Lucida Grande", Verdana; - font-size: 0.9em; - text-align: center; - background-color:#F2F2F2; -} - -input, select { - font-size:0.9em; -} - -table { - margin-top:-10px; - margin-left:7px; -} - -h4 { - font-size:1.1em; - text-decoration:none; - font-weight:normal; - color:#23A4FF; -} - -a { - color:#23A4FF; -} - -#container { - width: 1000px; - height: 600px; - margin:0 auto; - position:relative; -} - -#left-container, -#right-container, -#center-container { - height:600px; - position:absolute; - top:0; -} - -#left-container, #right-container { - width:200px; - color:#686c70; - text-align: left; - overflow: auto; - background-color:#fff; - background-repeat:no-repeat; - border-bottom:1px solid #ddd; -} - -#left-container { - left:0; - /*background-image:url('col2.png'); - background-position:center right; */ - border-left:1px solid #ddd; - -} - -#right-container { - right:0; - /* background-image:url('col1.png'); - background-position:center left; */ - border-right:1px solid #ddd; -} - -#right-container h4{ - text-indent:8px; -} - -#center-container { - width:800px; - left:200px; - background-color:#1a1a1a; - color:#ccc; -} - -.text { - margin: 7px; -} - -#inner-details { - font-size:0.8em; - list-style:none; - margin:7px; -} - -#log { - position:absolute; - top:10px; - font-size:1.0em; - font-weight:bold; - color:#23A4FF; -} - - -#infovis { - position:relative; - width:800px; - height:600px; - margin:auto; - overflow:hidden; -} - -/*TOOLTIPS*/ -.tip { - color: #111; - width: 139px; - background-color: white; - border:1px solid #ccc; - -moz-box-shadow:#555 2px 2px 8px; - -webkit-box-shadow:#555 2px 2px 8px; - -o-box-shadow:#555 2px 2px 8px; - box-shadow:#555 2px 2px 8px; - opacity:0.9; - filter:alpha(opacity=90); - font-size:10px; - font-family:Verdana, Geneva, Arial, Helvetica, sans-serif; - padding:7px; -} \ No newline at end of file diff --git a/OPAL/av/src/main/scala/org/opalj/av/viz/data.js b/OPAL/av/src/main/scala/org/opalj/av/viz/data.js deleted file mode 100644 index a4bc1eacd1..0000000000 --- a/OPAL/av/src/main/scala/org/opalj/av/viz/data.js +++ /dev/null @@ -1,439 +0,0 @@ -var labelType, useGradients, nativeTextSupport, animate; - -(function() { - var ua = navigator.userAgent, - iStuff = ua.match(/iPhone/i) || ua.match(/iPad/i), - typeOfCanvas = typeof HTMLCanvasElement, - nativeCanvasSupport = (typeOfCanvas == 'object' || typeOfCanvas == 'function'), - textSupport = nativeCanvasSupport - && (typeof document.createElement('canvas').getContext('2d').fillText == 'function'); - //I'm setting this based on the fact that ExCanvas provides text support for IE - //and that as of today iPhone/iPad current text support is lame - labelType = (!nativeCanvasSupport || (textSupport && !iStuff))? 'Native' : 'HTML'; - nativeTextSupport = labelType == 'Native'; - useGradients = nativeCanvasSupport; - animate = !(iStuff || !nativeCanvasSupport); -})(); - -var Log = { - elem: false, - write: function(text){ - if (!this.elem) - this.elem = document.getElementById('log'); - this.elem.innerHTML = text; - this.elem.style.left = (700 - this.elem.offsetWidth / 2) + 'px'; - } -}; - - -var icicle; - -function init(){ - //left panel controls - controls(); - - // init data - var json = { - - "id": "", - "name": ":222374", - "data": { - "$area": 222374, - "$dim": 222374, - "$color": "#3030b0" - },"children": [{ -"id": "org", - "name": "org ∑222374 (985)", - "data": { - "$area": 222374, - "$dim": 222374, - "$color": "#80c080" - },"children": [{ -"id": "org/opalj", - "name": "opalj ∑221389 (83)", - "data": { - "$area": 221389, - "$dim": 221389, - "$color": "#80c080" - },"children": [{ -"id": "org/opalj/graphs", - "name": "graphs ∑433 (433)", - "data": { - "$area": 433, - "$dim": 433, - "$color": "#80c080" - }},{ -"id": "org/opalj/av", - "name": "av ∑5468 (4572)", - "data": { - "$area": 5468, - "$dim": 5468, - "$color": "#80c080" - },"children": [{ -"id": "org/opalj/av/viz", - "name": "viz ∑896 (896)", - "data": { - "$area": 896, - "$dim": 896, - "$color": "#80c080" - }}] -},{ -"id": "org/opalj/bi", - "name": "bi ∑8228 (3695)", - "data": { - "$area": 8228, - "$dim": 8228, - "$color": "#80c080" - },"children": [{ -"id": "org/opalj/bi/reader", - "name": "reader ∑4533 (4533)", - "data": { - "$area": 4533, - "$dim": 4533, - "$color": "#80c080" - }}] -},{ -"id": "org/opalj/br", - "name": "br ∑94973 (34262)", - "data": { - "$area": 94973, - "$dim": 94973, - "$color": "#80c080" - },"children": [{ -"id": "org/opalj/br/instructions", - "name": "instructions ∑26501 (26501)", - "data": { - "$area": 26501, - "$dim": 26501, - "$color": "#80c080" - }},{ -"id": "org/opalj/br/ai/taint", - "name": "ai.taint ∑47 (47)", - "data": { - "$area": 47, - "$dim": 47, - "$color": "#80c080" - }},{ -"id": "org/opalj/br/reader", - "name": "reader ∑16656 (16656)", - "data": { - "$area": 16656, - "$dim": 16656, - "$color": "#80c080" - }},{ -"id": "org/opalj/br/analyses", - "name": "analyses ∑17507 (15766)", - "data": { - "$area": 17507, - "$dim": 17507, - "$color": "#80c080" - },"children": [{ -"id": "org/opalj/br/analyses/observers", - "name": "observers ∑1687 (1687)", - "data": { - "$area": 1687, - "$dim": 1687, - "$color": "#80c080" - }},{ -"id": "org/opalj/br/analyses/ioc", - "name": "ioc ∑54 (54)", - "data": { - "$area": 54, - "$dim": 54, - "$color": "#80c080" - }}] -}] -},{ -"id": "org/opalj/frb", - "name": "frb ∑25364 (1150)", - "data": { - "$area": 25364, - "$dim": 25364, - "$color": "#80c080" - },"children": [{ -"id": "org/opalj/frb/analyses", - "name": "analyses ∑23326 (23326)", - "data": { - "$area": 23326, - "$dim": 23326, - "$color": "#80c080" - }},{ -"id": "org/opalj/frb/cli", - "name": "cli ∑888 (888)", - "data": { - "$area": 888, - "$dim": 888, - "$color": "#80c080" - }}] -},{ -"id": "org/opalj/collection", - "name": "collection ∑4710 (507)", - "data": { - "$area": 4710, - "$dim": 4710, - "$color": "#80c080" - },"children": [{ -"id": "org/opalj/collection/immutable", - "name": "immutable ∑2642 (2642)", - "data": { - "$area": 2642, - "$dim": 2642, - "$color": "#80c080" - }},{ -"id": "org/opalj/collection/mutable", - "name": "mutable ∑1561 (1561)", - "data": { - "$area": 1561, - "$dim": 1561, - "$color": "#80c080" - }}] -},{ -"id": "org/opalj/da", - "name": "da ∑5039 (5039)", - "data": { - "$area": 5039, - "$dim": 5039, - "$color": "#80c080" - }},{ -"id": "org/opalj/util", - "name": "util ∑1507 (1507)", - "data": { - "$area": 1507, - "$dim": 1507, - "$color": "#80c080" - }},{ -"id": "org/opalj/ai", - "name": "ai ∑70554 (18297)", - "data": { - "$area": 70554, - "$dim": 70554, - "$color": "#80c080" - },"children": [{ -"id": "org/opalj/ai/dataflow", - "name": "dataflow ∑4477 (3180)", - "data": { - "$area": 4477, - "$dim": 4477, - "$color": "#80c080" - },"children": [{ -"id": "org/opalj/ai/dataflow/spec", - "name": "spec ∑1291 (1291)", - "data": { - "$area": 1291, - "$dim": 1291, - "$color": "#80c080" - }},{ -"id": "org/opalj/ai/dataflow/solver", - "name": "solver ∑6 (6)", - "data": { - "$area": 6, - "$dim": 6, - "$color": "#80c080" - }}] -},{ -"id": "org/opalj/ai/domain", - "name": "domain ∑30490 (1562)", - "data": { - "$area": 30490, - "$dim": 30490, - "$color": "#80c080" - },"children": [{ -"id": "org/opalj/ai/domain/l2", - "name": "l2 ∑410 (410)", - "data": { - "$area": 410, - "$dim": 410, - "$color": "#80c080" - }},{ -"id": "org/opalj/ai/domain/l0", - "name": "l0 ∑11599 (11599)", - "data": { - "$area": 11599, - "$dim": 11599, - "$color": "#80c080" - }},{ -"id": "org/opalj/ai/domain/l1", - "name": "l1 ∑16432 (16432)", - "data": { - "$area": 16432, - "$dim": 16432, - "$color": "#80c080" - }},{ -"id": "org/opalj/ai/domain/tracing", - "name": "tracing ∑487 (487)", - "data": { - "$area": 487, - "$dim": 487, - "$color": "#80c080" - }}] -},{ -"id": "org/opalj/ai/debug", - "name": "debug ∑8153 (8153)", - "data": { - "$area": 8153, - "$dim": 8153, - "$color": "#80c080" - }},{ -"id": "org/opalj/ai/project", - "name": "project ∑8878 (8878)", - "data": { - "$area": 8878, - "$dim": 8878, - "$color": "#80c080" - }},{ -"id": "org/opalj/ai/util", - "name": "util ∑105 (105)", - "data": { - "$area": 105, - "$dim": 105, - "$color": "#80c080" - }},{ -"id": "org/opalj/ai/invokedynamic", - "name": "invokedynamic ∑154 (154)", - "data": { - "$area": 154, - "$dim": 154, - "$color": "#80c080" - }}] -},{ -"id": "org/opalj/de", - "name": "de ∑5030 (5030)", - "data": { - "$area": 5030, - "$dim": 5030, - "$color": "#80c080" - }}] -}] -}] - - }; - // end - // init Icicle - icicle = new $jit.Icicle({ - // id of the visualization container - injectInto: 'infovis', - // whether to add transition animations - animate: animate, - // nodes offset - offset: 1, - // whether to add cushion type nodes - cushion: false, - //show only three levels at a time - constrained: true, - levelsToShow: 3, - // enable tips - Tips: { - enable: true, - type: 'Native', - // add positioning offsets - offsetX: 20, - offsetY: 20, - // implement the onShow method to - // add content to the tooltip when a node - // is hovered - onShow: function(tip, node){ - // count children - var count = 0; - node.eachSubnode(function(){ - count++; - }); - // add tooltip info - tip.innerHTML = "
Name: " + node.name - + "
" + count + " children
"; - } - }, - // Add events to nodes - Events: { - enable: true, - onMouseEnter: function(node) { - //add border and replot node - node.setData('border', '#33dddd'); - icicle.fx.plotNode(node, icicle.canvas); - icicle.labels.plotLabel(icicle.canvas, node, icicle.controller); - }, - onMouseLeave: function(node) { - node.removeData('border'); - icicle.fx.plot(); - }, - onClick: function(node){ - if (node) { - //hide tips and selections - icicle.tips.hide(); - if(icicle.events.hovered) - this.onMouseLeave(icicle.events.hovered); - //perform the enter animation - icicle.enter(node); - } - }, - onRightClick: function(){ - //hide tips and selections - icicle.tips.hide(); - if(icicle.events.hovered) - this.onMouseLeave(icicle.events.hovered); - //perform the out animation - icicle.out(); - } - }, - // Add canvas label styling - Label: { - type: labelType // "Native" or "HTML" - }, - // Add the name of the node in the corresponding label - // This method is called once, on label creation and only for DOM and not - // Native labels. - onCreateLabel: function(domElement, node){ - domElement.innerHTML = node.name; - var style = domElement.style; - style.fontSize = '0.9em'; - style.display = ''; - style.cursor = 'pointer'; - style.color = '#333'; - style.overflow = 'hidden'; - }, - // Change some label dom properties. - // This method is called each time a label is plotted. - onPlaceLabel: function(domElement, node){ - var style = domElement.style, - width = node.getData('width'), - height = node.getData('height'); - if(width < 7 || height < 7) { - style.display = 'none'; - } else { - style.display = ''; - style.width = width + 'px'; - style.height = height + 'px'; - } - } - }); - // load data - icicle.loadJSON(json); - // compute positions and plot - icicle.refresh(); - //end -} - -//init controls -function controls() { - var jit = $jit; - var gotoparent = jit.id('update'); - jit.util.addEvent(gotoparent, 'click', function() { - icicle.out(); - }); - var select = jit.id('s-orientation'); - jit.util.addEvent(select, 'change', function () { - icicle.layout.orientation = select[select.selectedIndex].value; - icicle.refresh(); - }); - var levelsToShowSelect = jit.id('i-levels-to-show'); - jit.util.addEvent(levelsToShowSelect, 'change', function () { - var index = levelsToShowSelect.selectedIndex; - if(index == 0) { - icicle.config.constrained = false; - } else { - icicle.config.constrained = true; - icicle.config.levelsToShow = index; - } - icicle.refresh(); - }); -} -//end diff --git a/OPAL/av/src/main/scala/org/opalj/av/viz/jit-yc.js b/OPAL/av/src/main/scala/org/opalj/av/viz/jit-yc.js deleted file mode 100644 index abdcf7a02f..0000000000 --- a/OPAL/av/src/main/scala/org/opalj/av/viz/jit-yc.js +++ /dev/null @@ -1,23 +0,0 @@ -/* -Copyright (c) 2011 Sencha Inc. - Author: Nicolas Garcia Belmonte (http://philogb.github.com/) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - */ - (function(){window.$jit=function(x){x=x||window;for(var y in $jit){if($jit[y].$extend){x[y]=$jit[y]}}};$jit.version="2.0.1";var c=function(w){return document.getElementById(w)};c.empty=function(){};c.extend=function(y,w){for(var x in (w||{})){y[x]=w[x]}return y};c.lambda=function(w){return(typeof w=="function")?w:function(){return w}};c.time=Date.now||function(){return +new Date};c.splat=function(x){var w=c.type(x);return w?((w!="array")?[x]:x):[]};c.type=function(x){var w=c.type.s.call(x).match(/^\[object\s(.*)\]$/)[1].toLowerCase();if(w!="object"){return w}if(x&&x.$$family){return x.$$family}return(x&&x.nodeName&&x.nodeType==1)?"element":w};c.type.s=Object.prototype.toString;c.each=function(B,A){var z=c.type(B);if(z=="object"){for(var y in B){A(B[y],y)}}else{for(var x=0,w=B.length;x>16,y>>8&255,y&255]}};c.destroy=function(w){c.clean(w);if(w.parentNode){w.parentNode.removeChild(w)}if(w.clearAttributes){w.clearAttributes()}};c.clean=function(z){for(var y=z.childNodes,x=0,w=y.length;x-1};c.addClass=function(x,w){if(!c.hasClass(x,w)){x.className=(x.className+" "+w)}};c.removeClass=function(x,w){x.className=x.className.replace(new RegExp("(^|\\s)"+w+"(?:\\s|$)"),"$1")};c.getPos=function(y){var B=A(y);var w=z(y);return{x:B.x-w.x,y:B.y-w.y};function A(D){var C={x:0,y:0};while(D&&!x(D)){C.x+=D.offsetLeft;C.y+=D.offsetTop;D=D.offsetParent}return C}function z(D){var C={x:0,y:0};while(D&&!x(D)){C.x+=D.scrollLeft;C.y+=D.scrollTop;D=D.parentNode}return C}function x(C){return(/^(?:body|html)$/i).test(C.tagName)}};c.event={get:function(x,w){w=w||window;return x||w.event},getWheel:function(w){return w.wheelDelta?w.wheelDelta/120:-(w.detail||0)/3},isRightClick:function(w){return(w.which==3||w.button==2)},getPos:function(z,y){y=y||window;z=z||y.event;var x=y.document;x=x.documentElement||x.body;if(z.touches&&z.touches.length){z=z.touches[0]}var w={x:z.pageX||(z.clientX+x.scrollLeft),y:z.pageY||(z.clientY+x.scrollTop)};return w},stop:function(w){if(w.stopPropagation){w.stopPropagation()}w.cancelBubble=true;if(w.preventDefault){w.preventDefault()}else{w.returnValue=false}}};$jit.util=$jit.id=c;var q=function(x){x=x||{};var w=function(){for(var A in this){if(typeof this[A]!="function"){this[A]=c.unlink(this[A])}}this.constructor=w;if(q.prototyping){return this}var z=this.initialize?this.initialize.apply(this,arguments):this;this.$$family="class";return z};for(var y in q.Mutators){if(!x[y]){continue}x=q.Mutators[y](x,x[y]);delete x[y]}c.extend(w,this);w.constructor=q;w.prototype=x;return w};q.Mutators={Implements:function(w,x){c.each(c.splat(x),function(z){q.prototyping=z;var y=(typeof z=="function")?new z:z;for(var A in y){if(!(A in w)){w[A]=y[A]}}delete q.prototyping});return w}};c.extend(q,{inherit:function(w,z){for(var y in z){var x=z[y];var B=w[y];var A=c.type(x);if(B&&A=="function"){if(x!=B){q.override(w,y,x)}}else{if(A=="object"){w[y]=c.merge(B,x)}else{w[y]=x}}}return w},override:function(x,w,A){var z=q.prototyping;if(z&&x[w]!=z[w]){z=null}var y=function(){var B=this.parent;this.parent=z?z[w]:x[w];var C=A.apply(this,arguments);this.parent=B;return C};x[w]=y}});q.prototype.implement=function(){var w=this.prototype;c.each(Array.prototype.slice.call(arguments||[]),function(x){q.inherit(w,x)});return this};$jit.Class=q;$jit.json={prune:function(x,w){this.each(x,function(z,y){if(y==w&&z.children){delete z.children;z.children=[]}})},getParent:function(w,A){if(w.id==A){return false}var z=w.children;if(z&&z.length>0){for(var y=0;y=(7-4*z)/11){A=y*y-Math.pow((11-6*z-11*B)/4,2);break}}return A},Elastic:function(z,y){return Math.pow(2,10*--z)*Math.cos(20*z*Math.PI*(y[0]||1)/3)}};c.each(x,function(z,y){i[y]=w(z)});c.each(["Quad","Cubic","Quart","Quint"],function(z,y){i[z]=w(function(A){return Math.pow(A,[y+2])})})})();var u=new q({initialize:function(w){this.setOptions(w)},setOptions:function(w){var x={duration:2500,fps:40,transition:i.Quart.easeInOut,compute:c.empty,complete:c.empty,link:"ignore"};this.opt=c.merge(x,w||{});return this},step:function(){var x=c.time(),w=this.opt;if(xD.height)?(F.y-C.height-E):F.y+E)+"px";A.left=((F.x+C.width+w>D.width)?(F.x-C.width-w):F.x+w)+"px"},hide:function(w){this.tip.style.display="none";w&&this.config.onHide()}});o.Classes.NodeStyles=new q({Implements:[t,h],initializePost:function(){this.fx=this.viz.fx;this.types=this.viz.fx.nodeTypes;this.nStyles=this.config;this.nodeStylesOnHover=this.nStyles.stylesHover;this.nodeStylesOnClick=this.nStyles.stylesClick;this.hoveredNode=false;this.fx.nodeFxAnimation=new u();this.down=false;this.move=false},onMouseOut:function(y,x){this.down=this.move=false;if(!this.hoveredNode){return}if(this.dom&&this.isLabel(y,x,true)){this.toggleStylesOnHover(this.hoveredNode,false)}var w=y.relatedTarget,z=this.canvas.getElement();while(w&&w.parentNode){if(z==w.parentNode){return}w=w.parentNode}this.toggleStylesOnHover(this.hoveredNode,false);this.hoveredNode=false},onMouseOver:function(z,y){var w;if(this.dom&&(w=this.isLabel(z,y,true))){var x=this.viz.graph.getNode(w.id);if(x.selected){return}this.hoveredNode=x;this.toggleStylesOnHover(this.hoveredNode,true)}},onMouseDown:function(A,z,x,y){if(y){return}var w;if(this.dom&&(w=this.isLabel(A,z))){this.down=this.viz.graph.getNode(w.id)}else{if(!this.dom){this.down=x.getNode()}}this.move=false},onMouseUp:function(z,y,w,x){if(x){return}if(!this.move){this.onClick(w.getNode())}this.down=this.move=false},getRestoredStyles:function(x,w){var z={},y=this["nodeStylesOn"+w];for(var A in y){z[A]=x.styles["$"+A]}return z},toggleStylesOnHover:function(w,x){if(this.nodeStylesOnHover){this.toggleStylesOn("Hover",w,x)}},toggleStylesOnClick:function(w,x){if(this.nodeStylesOnClick){this.toggleStylesOn("Click",w,x)}},toggleStylesOn:function(A,w,C){var D=this.viz;var B=this.nStyles;if(C){var z=this;if(!w.styles){w.styles=c.merge(w.data,{})}for(var E in this["nodeStylesOn"+A]){var x="$"+E;if(!(x in w.styles)){w.styles[x]=w.getData(E)}}D.fx.nodeFx(c.extend({elements:{id:w.id,properties:z["nodeStylesOn"+A]},transition:i.Quart.easeOut,duration:300,fps:40},this.config))}else{var y=this.getRestoredStyles(w,A);D.fx.nodeFx(c.extend({elements:{id:w.id,properties:y},transition:i.Quart.easeOut,duration:300,fps:40},this.config))}},onClick:function(w){if(!w){return}var x=this.nodeStylesOnClick;if(!x){return}if(w.selected){this.toggleStylesOnClick(w,false);delete w.selected}else{this.viz.graph.eachNode(function(z){if(z.selected){for(var y in x){z.setData(y,z.styles["$"+y],"end")}delete z.selected}});this.toggleStylesOnClick(w,true);w.selected=true;delete w.hovered;this.hoveredNode=false}},onMouseMove:function(C,B,z){if(this.down){this.move=true}if(this.dom&&this.isLabel(C,B)){return}var A=this.nodeStylesOnHover;if(!A){return}if(!this.dom){if(this.hoveredNode){var x=this.types[this.hoveredNode.getData("type")];var w=x&&x.contains&&x.contains.call(this.fx,this.hoveredNode,z.getPos());if(w){return}}var y=z.getNode();if(!this.hoveredNode&&!y){return}if(y.hovered){return}if(y&&!y.selected){this.fx.nodeFxAnimation.stopTimer();this.viz.graph.eachNode(function(E){if(E.hovered&&!E.selected){for(var D in A){E.setData(D,E.styles["$"+D],"end")}delete E.hovered}});y.hovered=true;this.hoveredNode=y;this.toggleStylesOnHover(y,true)}else{if(this.hoveredNode&&!this.hoveredNode.selected){this.fx.nodeFxAnimation.stopTimer();this.toggleStylesOnHover(this.hoveredNode,false);delete this.hoveredNode.hovered;this.hoveredNode=false}}}}});o.Classes.Navigation=new q({Implements:[t,h],initializePost:function(){this.pos=false;this.pressed=false},onMouseWheel:function(z,y,w){if(!this.config.zooming){return}c.event.stop(c.event.get(z,y));var A=this.config.zooming/1000,x=1+w*A;this.canvas.scale(x,x)},onMouseDown:function(B,A,z){if(!this.config.panning){return}if(this.config.panning=="avoid nodes"&&(this.dom?this.isLabel(B,A):z.getNode())){return}this.pressed=true;this.pos=z.getPos();var y=this.canvas,x=y.translateOffsetX,w=y.translateOffsetY,D=y.scaleOffsetX,C=y.scaleOffsetY;this.pos.x*=D;this.pos.x+=x;this.pos.y*=C;this.pos.y+=w},onMouseMove:function(D,C,F){if(!this.config.panning){return}if(!this.pressed){return}if(this.config.panning=="avoid nodes"&&(this.dom?this.isLabel(D,C):F.getNode())){return}var B=this.pos,E=F.getPos(),z=this.canvas,A=z.translateOffsetX,w=z.translateOffsetY,J=z.scaleOffsetX,H=z.scaleOffsetY;E.x*=J;E.y*=H;E.x+=A;E.y+=w;var I=E.x-B.x,G=E.y-B.y;this.pos=E;this.canvas.translate(I*1/J,G*1/H)},onMouseUp:function(z,y,x,w){if(!this.config.panning){return}this.pressed=false}});var l;(function(){var w=typeof HTMLCanvasElement,y=(w=="object"||w=="function");function x(z,A){var B=document.createElement(z);for(var C in A){if(typeof A[C]=="object"){c.extend(B[C],A[C])}else{B[C]=A[C]}}if(z=="canvas"&&!y&&G_vmlCanvasManager){B=G_vmlCanvasManager.initElement(document.body.appendChild(B))}return B}$jit.Canvas=l=new q({canvases:[],pos:false,element:false,labelContainer:false,translateOffsetX:0,translateOffsetY:0,scaleOffsetX:1,scaleOffsetY:1,initialize:function(L,E){this.viz=L;this.opt=this.config=E;var B=c.type(E.injectInto)=="string"?E.injectInto:E.injectInto.id,K=E.type,C=B+"-label",z=c(B),D=E.width||z.offsetWidth,M=E.height||z.offsetHeight;this.id=B;var F={injectInto:B,width:D,height:M};this.element=x("div",{id:B+"-canvaswidget",style:{position:"relative",width:D+"px",height:M+"px"}});this.labelContainer=this.createLabelContainer(E.Label.type,C,F);this.canvases.push(new l.Base[K]({config:c.extend({idSuffix:"-canvas"},F),plot:function(N){L.fx.plot()},resize:function(){L.refresh()}}));var G=E.background;if(G){var J=new l.Background[G.type](L,c.extend(G,F));this.canvases.push(new l.Base[K](J))}var I=this.canvases.length;while(I--){this.element.appendChild(this.canvases[I].canvas);if(I>0){this.canvases[I].plot()}}this.element.appendChild(this.labelContainer);z.appendChild(this.element);var A=null,H=this;c.addEvent(window,"scroll",function(){clearTimeout(A);A=setTimeout(function(){H.getPos(true)},500)})},getCtx:function(z){return this.canvases[z||0].getCtx()},getConfig:function(){return this.opt},getElement:function(){return this.element},getSize:function(z){return this.canvases[z||0].getSize()},resize:function(D,z){this.getPos(true);this.translateOffsetX=this.translateOffsetY=0;this.scaleOffsetX=this.scaleOffsetY=1;for(var B=0,A=this.canvases.length;BE){A=x((E+((B-C)-E)*F))}else{A=x((E-C+(B-(E))*F))}}else{if(D>=z){if(B>E){A=x((E+((B-C)-E)*F))}else{A=x((E-C+(B-(E-C))*F))}}else{A=x((E+(B-E)*F))}}var w=(this.rho-y.rho)*F+y.rho;return{theta:A,rho:w}}};var k=function(x,w){return new b(x,w)};b.KER=k(0,0);var p=function(w,z){this.x=w||0;this.y=z||0};$jit.Complex=p;p.prototype={getc:function(){return this},getp:function(w){return this.toPolar(w)},set:function(w){w=w.getc(true);this.x=w.x;this.y=w.y},setc:function(w,z){this.x=w;this.y=z},setp:function(x,w){this.x=Math.cos(x)*w;this.y=Math.sin(x)*w},clone:function(){return new p(this.x,this.y)},toPolar:function(y){var w=this.norm();var x=Math.atan2(this.y,this.x);if(x<0){x+=Math.PI*2}if(y){return{theta:x,rho:w}}return new b(x,w)},norm:function(){return Math.sqrt(this.squaredNorm())},squaredNorm:function(){return this.x*this.x+this.y*this.y},add:function(w){return new p(this.x+w.x,this.y+w.y)},prod:function(w){return new p(this.x*w.x-this.y*w.y,this.y*w.x+this.x*w.y)},conjugate:function(){return new p(this.x,-this.y)},scale:function(w){return new p(this.x*w,this.y*w)},equals:function(w){return this.x==w.x&&this.y==w.y},$add:function(w){this.x+=w.x;this.y+=w.y;return this},$prod:function(A){var w=this.x,z=this.y;this.x=w*A.x-z*A.y;this.y=z*A.x+w*A.y;return this},$conjugate:function(){this.y=-this.y;return this},$scale:function(w){this.x*=w;this.y*=w;return this},$div:function(B){var w=this.x,A=this.y;var z=B.squaredNorm();this.x=w*B.x+A*B.y;this.y=A*B.x-w*B.y;return this.$scale(1/z)},isZero:function(){var x=0.0001,w=Math.abs;return w(this.x)=F&&I<=G&&w(H)){B(H,I)}if(II){y(K,F,G)}})}})(A,E+D,x+D)},eachSubgraph:function(x,y,w){this.eachLevel(x,0,false,y,w)},eachSubnode:function(x,y,w){this.eachLevel(x,1,1,y,w)},anySubnode:function(z,y,x){var w=false;y=y||c.lambda(true);var A=c.type(y)=="string"?function(B){return B[y]}:y;this.eachSubnode(z,function(B){if(A(B)){w=true}},x);return w},getSubnodes:function(B,C,w){var y=[],A=this;C=C||0;var z,x;if(c.type(C)=="array"){z=C[0];x=C[1]}else{z=C;x=Number.MAX_VALUE-B._depth}this.eachLevel(B,z,x,function(D){y.push(D)},w);return y},getParents:function(x){var w=[];this.eachAdjacency(x,function(y){var z=y.nodeTo;if(z._depth-1)){H.endData[J]=G[J]}else{H.data[J]=G[J]}}}});B.graph.eachNode(function(G){if(G.ignore){return}G.eachAdjacency(function(H){if(H.nodeFrom.ignore||H.nodeTo.ignore){return}var I=C.getNode(H.nodeFrom.id);var J=C.getNode(H.nodeTo.id);if(!I.adjacentTo(J)){var H=B.graph.getAdjacence(I.id,J.id);w=true;H.setData("alpha",1);H.setData("alpha",1,"start");H.setData("alpha",0,"end")}})});var w=this.preprocessSum(C);var y=!w?["node-property:alpha"]:["node-property:alpha","edge-property:alpha"];y[0]=y[0]+(("node-property" in z)?(":"+c.splat(z["node-property"]).join(":")):"");y[1]=(y[1]||"edge-property:alpha")+(("edge-property" in z)?(":"+c.splat(z["edge-property"]).join(":")):"");if("label-property" in z){y.push("label-property:"+c.splat(z["label-property"]).join(":"))}if(B.reposition){B.reposition()}else{B.compute("end")}B.graph.eachNode(function(G){if(G.id!=A&&G.pos.getp().equals(b.KER)){G.pos.set(G.endPos);G.startPos.set(G.endPos)}});B.fx.animate(c.merge(F,{modes:[z.position||"polar"].concat(y),onComplete:function(){B.graph.eachNode(function(G){if(G.ignore){B.graph.removeNode(G.id)}});B.graph.eachNode(function(G){G.eachAdjacency(function(H){if(H.ignore){B.graph.removeAdjacence(H.nodeFrom.id,H.nodeTo.id)}})});F.onComplete()}}));break;default:}},contract:function(y,x){var w=this.viz;if(y.collapsed||!y.anySubnode(c.lambda(true))){return}x=c.merge(this.options,w.config,x||{},{modes:["node-property:alpha:span","linear"]});y.collapsed=true;(function z(A){A.eachSubnode(function(B){B.ignore=true;B.setData("alpha",0,x.type=="animate"?"end":"current");z(B)})})(y);if(x.type=="animate"){w.compute("end");if(w.rotated){w.rotate(w.rotated,"none",{property:"end"})}(function z(A){A.eachSubnode(function(B){B.setPos(y.getPos("end"),"end");z(B)})})(y);w.fx.animate(x)}else{if(x.type=="replot"){w.refresh()}}},expand:function(y,x){if(!("collapsed" in y)){return}var w=this.viz;x=c.merge(this.options,w.config,x||{},{modes:["node-property:alpha:span","linear"]});delete y.collapsed;(function z(A){A.eachSubnode(function(B){delete B.ignore;B.setData("alpha",1,x.type=="animate"?"end":"current");z(B)})})(y);if(x.type=="animate"){w.compute("end");if(w.rotated){w.rotate(w.rotated,"none",{property:"end"})}w.fx.animate(x)}else{if(x.type=="replot"){w.refresh()}}},preprocessSum:function(x){var w=this.viz;x.eachNode(function(z){if(!w.graph.hasNode(z.id)){w.graph.addNode(z);var A=w.graph.getNode(z.id);A.setData("alpha",0);A.setData("alpha",0,"start");A.setData("alpha",1,"end")}});var y=false;x.eachNode(function(z){z.eachAdjacency(function(A){var B=w.graph.getNode(A.nodeFrom.id);var C=w.graph.getNode(A.nodeTo.id);if(!B.adjacentTo(C)){var A=w.graph.addAdjacence(B,C,A.data);if(B.startAlpha==B.endAlpha&&C.startAlpha==C.endAlpha){y=true;A.setData("alpha",0);A.setData("alpha",0,"start");A.setData("alpha",1,"end")}}})});return y}};var a={none:{render:c.empty,contains:c.lambda(false)},circle:{render:function(z,A,w,y){var x=y.getCtx();x.beginPath();x.arc(A.x,A.y,w,0,Math.PI*2,true);x.closePath();x[z]()},contains:function(B,A,w){var y=B.x-A.x,x=B.y-A.y,z=y*y+x*x;return z<=w*w}},ellipse:{render:function(C,E,w,F,x){var G=x.getCtx(),z=1,y=1,D=1,B=1,A=0;if(w>F){A=w/2;y=F/w;B=w/F}else{A=F/2;z=w/F;D=F/w}G.save();G.scale(z,y);G.beginPath();G.arc(E.x*D,E.y*B,A,0,Math.PI*2,true);G.closePath();G[C]();G.restore()},contains:function(w,D,x,F){var C=0,B=1,A=1,z=0,y=0,E=0;if(x>F){C=x/2;A=F/x}else{C=F/2;B=x/F}z=(w.x-D.x)*(1/B);y=(w.y-D.y)*(1/A);E=z*z+y*y;return E<=C*C}},square:{render:function(x,z,y,w){w.getCtx()[x+"Rect"](z.x-y,z.y-y,2*y,2*y)},contains:function(y,x,w){return Math.abs(x.x-y.x)<=w&&Math.abs(x.y-y.y)<=w}},rectangle:{render:function(z,A,y,w,x){x.getCtx()[z+"Rect"](A.x-y/2,A.y-w/2,y,w)},contains:function(z,y,x,w){return Math.abs(y.x-z.x)<=x/2&&Math.abs(y.y-z.y)<=w/2}},triangle:{render:function(C,D,z,w){var G=w.getCtx(),y=D.x,x=D.y-z,F=y-z,E=D.y+z,B=y+z,A=E;G.beginPath();G.moveTo(y,x);G.lineTo(F,E);G.lineTo(B,A);G.closePath();G[C]()},contains:function(y,x,w){return a.circle.contains(y,x,w)}},star:{render:function(A,C,B,x){var w=x.getCtx(),z=Math.PI/5;w.save();w.translate(C.x,C.y);w.beginPath();w.moveTo(B,0);for(var y=0;y<9;y++){w.rotate(z);if(y%2==0){w.lineTo((B/0.525731)*0.200811,0)}else{w.lineTo(B,0)}}w.closePath();w[A]();w.restore()},contains:function(y,x,w){return a.circle.contains(y,x,w)}}};var m={line:{render:function(z,y,x){var w=x.getCtx();w.beginPath();w.moveTo(z.x,z.y);w.lineTo(y.x,y.y);w.stroke()},contains:function(G,y,B,E){var z=Math.min,C=Math.max,x=z(G.x,y.x),F=C(G.x,y.x),w=z(G.y,y.y),D=C(G.y,y.y);if(B.x>=x&&B.x<=F&&B.y>=w&&B.y<=D){if(Math.abs(y.x-G.x)<=E){return true}var A=(y.y-G.y)/(y.x-G.x)*(B.x-G.x)+G.y;return Math.abs(A-B.y)<=E}return false}},arrow:{render:function(F,G,z,x,w){var H=w.getCtx();if(x){var y=F;F=G;G=y}var C=new p(G.x-F.x,G.y-F.y);C.$scale(z/C.norm());var A=new p(G.x-C.x,G.y-C.y),B=new p(-C.y/2,C.x/2),E=A.add(B),D=A.$add(B.$scale(-1));H.beginPath();H.moveTo(F.x,F.y);H.lineTo(G.x,G.y);H.stroke();H.beginPath();H.moveTo(E.x,E.y);H.lineTo(D.x,D.y);H.lineTo(G.x,G.y);H.closePath();H.fill()},contains:function(x,w,z,y){return m.line.contains(x,w,z,y)}},hyperline:{render:function(D,E,w,y){var F=y.getCtx();var z=A(D,E);if(z.a>1000||z.b>1000||z.ratio<0){F.beginPath();F.moveTo(D.x*w,D.y*w);F.lineTo(E.x*w,E.y*w);F.stroke()}else{var C=Math.atan2(E.y-z.y,E.x-z.x);var B=Math.atan2(D.y-z.y,D.x-z.x);var x=x(C,B);F.beginPath();F.arc(z.x*w,z.y*w,z.ratio*w,C,B,x);F.stroke()}function A(S,R){var K=(S.x*R.y-S.y*R.x),G=K;var J=S.squaredNorm(),I=R.squaredNorm();if(K==0){return{x:0,y:0,ratio:-1}}var Q=(S.y*I-R.y*J+S.y-R.y)/K;var O=(R.x*J-S.x*I+R.x-S.x)/G;var P=-Q/2;var N=-O/2;var M=(Q*Q+O*O)/4-1;if(M<0){return{x:0,y:0,ratio:-1}}var L=Math.sqrt(M);var H={x:P,y:N,ratio:L>1000?-1:L,a:Q,b:O};return H}function x(G,H){return(GH)?false:true):((H+Math.PI>G)?true:false)}},contains:c.lambda(false)}};e.Plot={initialize:function(x,w){this.viz=x;this.config=x.config;this.node=x.config.Node;this.edge=x.config.Edge;this.animation=new u;this.nodeTypes=new w.Plot.NodeTypes;this.edgeTypes=new w.Plot.EdgeTypes;this.labels=x.labels},nodeHelper:a,edgeHelper:m,Interpolator:{map:{border:"color",color:"color",width:"number",height:"number",dim:"number",alpha:"number",lineWidth:"number",angularWidth:"number",span:"number",valueArray:"array-number",dimArray:"array-number"},canvas:{globalAlpha:"number",fillStyle:"color",strokeStyle:"color",lineWidth:"number",shadowBlur:"number",shadowColor:"color",shadowOffsetX:"number",shadowOffsetY:"number",miterLimit:"number"},label:{size:"number",color:"color"},compute:function(y,x,w){return y+(x-y)*w},moebius:function(D,C,F,z){var B=z.scale(-F);if(B.norm()<1){var w=B.x,E=B.y;var A=D.startPos.getc().moebiusTransformation(B);D.pos.setc(A.x,A.y);B.x=w;B.y=E}},linear:function(x,w,A){var z=x.startPos.getc(true);var y=x.endPos.getc(true);x.pos.setc(this.compute(z.x,y.x,A),this.compute(z.y,y.y,A))},polar:function(y,x,B){var A=y.startPos.getp(true);var z=y.endPos.getp();var w=z.interpolate(A,B);y.pos.setp(w.theta,w.rho)},number:function(x,C,B,w,A){var z=x[w](C,"start");var y=x[w](C,"end");x[A](C,this.compute(z,y,B))},color:function(y,w,E,B,z){var C=c.hexToRgb(y[B](w,"start"));var D=c.hexToRgb(y[B](w,"end"));var A=this.compute;var x=c.rgbToHex([parseInt(A(C[0],D[0],E)),parseInt(A(C[1],D[1],E)),parseInt(A(C[2],D[2],E))]);y[z](w,x)},"array-number":function(z,y,J,G,B){var H=z[G](y,"start"),I=z[G](y,"end"),K=[];for(var E=0,A=H.length;E=0.95){C.labels.plotLabel(y,I,x)}else{C.labels.hideLabel(I,false)}}I.visited=!z})},plotTree:function(A,x,E){var B=this,C=this.viz,y=C.canvas,z=this.config,D=y.getCtx();var w=A.getData("alpha");A.eachSubnode(function(G){if(x.plotSubtree(A,G)&&G.exist&&G.drawn){var F=A.getAdjacency(G.id);!E&&x.onBeforePlotLine(F);B.plotLine(F,y,E);!E&&x.onAfterPlotLine(F);B.plotTree(G,x,E)}});if(A.drawn){!E&&x.onBeforePlotNode(A);this.plotNode(A,y,E);!E&&x.onAfterPlotNode(A);if(!x.hideLabels&&x.withLabels&&w>=0.95){this.labels.plotLabel(y,A,x)}else{this.labels.hideLabel(A,false)}}else{this.labels.hideLabel(A,true)}},plotNode:function(y,x,F){var C=y.getData("type"),B=this.node.CanvasStyles;if(C!="none"){var w=y.getData("lineWidth"),A=y.getData("color"),z=y.getData("alpha"),D=x.getCtx();D.save();D.lineWidth=w;D.fillStyle=D.strokeStyle=A;D.globalAlpha=z;for(var E in B){D[E]=y.getCanvasStyle(E)}this.nodeTypes[C].render.call(this,y,x,F);D.restore()}},plotLine:function(C,x,G){var B=C.getData("type"),z=this.edge.CanvasStyles;if(B!="none"){var w=C.getData("lineWidth"),y=C.getData("color"),E=x.getCtx(),A=C.nodeFrom,D=C.nodeTo;E.save();E.lineWidth=w;E.fillStyle=E.strokeStyle=y;E.globalAlpha=Math.min(A.getData("alpha"),D.getData("alpha"),C.getData("alpha"));for(var F in z){E[F]=C.getCanvasStyle(F)}this.edgeTypes[B].render.call(this,C,x,G);E.restore()}}};e.Plot3D=c.merge(e.Plot,{Interpolator:{linear:function(x,w,A){var z=x.startPos.getc(true);var y=x.endPos.getc(true);x.pos.setc(this.compute(z.x,y.x,A),this.compute(z.y,y.y,A),this.compute(z.z,y.z,A))}},plotNode:function(x,w){if(x.getData("type")=="none"){return}this.plotElement(x,w,{getAlpha:function(){return x.getData("alpha")}})},plotLine:function(w,x){if(w.getData("type")=="none"){return}this.plotElement(w,x,{getAlpha:function(){return Math.min(w.nodeFrom.getData("alpha"),w.nodeTo.getData("alpha"),w.getData("alpha"))}})},plotElement:function(Y,E,z){var V=E.getCtx(),F=new Matrix4,x=E.config.Scene.Lighting,Z=E.canvases[0],K=Z.program,X=Z.camera;if(!Y.geometry){Y.geometry=new O3D[Y.getData("type")]}Y.geometry.update(Y);if(!Y.webGLVertexBuffer){var J=[],B=[],P=[],N=0,S=Y.geometry;for(var W=0,U=S.vertices,H=S.faces,G=H.length;W=x.width||y.x<0||y.y>=x.height||y.y<0){return false}return true}});e.Label.HTML=new q({Implements:e.Label.DOM,plotLabel:function(z,A,y){var B=A.id,w=this.getLabel(B);if(!w&&!(w=document.getElementById(B))){w=document.createElement("div");var x=this.getLabelContainer();w.id=B;w.className="node";w.style.position="absolute";y.onCreateLabel(w,A);x.appendChild(w);this.labels[A.id]=w}this.placeLabel(w,A,y)}});e.Label.SVG=new q({Implements:e.Label.DOM,plotLabel:function(z,B,y){var D=B.id,w=this.getLabel(D);if(!w&&!(w=document.getElementById(D))){var A="http://www.w3.org/2000/svg";w=document.createElementNS(A,"svg:text");var C=document.createElementNS(A,"svg:tspan");w.appendChild(C);var x=this.getLabelContainer();w.setAttribute("id",D);w.setAttribute("class","node");x.appendChild(w);y.onCreateLabel(w,B);this.labels[B.id]=w}this.placeLabel(w,B,y)}});e.Geom=new q({initialize:function(w){this.viz=w;this.config=w.config;this.node=w.config.Node;this.edge=w.config.Edge},translate:function(x,w){w=c.splat(w);this.viz.graph.eachNode(function(y){c.each(w,function(z){y.getPos(z).$add(x)})})},setRightLevelToShow:function(z,w,B){var A=this.getRightLevelToShow(z,w),y=this.viz.labels,x=c.merge({execShow:true,execHide:true,onHide:c.empty,onShow:c.empty},B||{});z.eachLevel(0,this.config.levelsToShow,function(D){var C=D._depth-z._depth;if(C>A){x.onHide(D);if(x.execHide){D.drawn=false;D.exist=false;y.hideLabel(D,false)}}else{x.onShow(D);if(x.execShow){D.exist=true}}});z.drawn=true},getRightLevelToShow:function(z,x){var w=this.config;var A=w.levelsToShow;var y=w.constrained;if(!y){return A}while(!this.treeFitsInCanvas(z,x,A)&&A>1){A--}return A}});var d={construct:function(x){var y=(c.type(x)=="array");var w=new e(this.graphOptions,this.config.Node,this.config.Edge,this.config.Label);if(!y){(function(z,B){z.addNode(B);if(B.children){for(var A=0,C=B.children;AC?F:C;D.setData("width",E);D.setData("height",E);D.setData("dim",E)}}})},initializeLabel:function(w){if(!this.label){this.label=document.createElement("div");document.body.appendChild(this.label)}this.setLabelStyles(w)},setLabelStyles:function(w){c.extend(this.label.style,{visibility:"hidden",position:"absolute",width:"auto",height:"auto"});this.label.className="jit-autoadjust-label"}};g.Tree=(function(){var F=Array.prototype.slice;function D(P,K,H,N,I){var M=K.Node;var J=K.multitree;if(M.overridable){var O=-1,L=-1;P.eachNode(function(S){if(S._depth==H&&(!J||("$orn" in S.data)&&S.data.$orn==N)){var Q=S.getData("width",I);var R=S.getData("height",I);O=(O0)?E[0]:null;D(E)}for(var z=0,A=[C.id].concat(x);z=D._depth)});for(var B=0;B0&&J.drawn){J.drawn=false;x[A.id].push(J)}else{if((!E||!D)&&J.drawn){J.drawn=false;x[A.id].push(J)}}});A.drawn=true}if(w.length>0){F.fx.plot()}for(B in x){c.each(x[B],function(J){J.drawn=true})}for(B=0;Bw?y:w)+this.config.subtreeOffset},getEdge:function(C,B,A){var y=function(E,w){return function(){return C.pos.add(new p(E,w))}};var D=this.node;var x=C.getData("width");var z=C.getData("height");if(B=="begin"){if(D.align=="center"){return this.dispatch(A,y(0,z/2),y(-x/2,0),y(0,-z/2),y(x/2,0))}else{if(D.align=="left"){return this.dispatch(A,y(0,z),y(0,0),y(0,0),y(x,0))}else{if(D.align=="right"){return this.dispatch(A,y(0,0),y(-x,0),y(0,-z),y(0,0))}else{throw"align: not implemented"}}}}else{if(B=="end"){if(D.align=="center"){return this.dispatch(A,y(0,-z/2),y(x/2,0),y(0,z/2),y(-x/2,0))}else{if(D.align=="left"){return this.dispatch(A,y(0,0),y(x,0),y(0,z),y(0,0))}else{if(D.align=="right"){return this.dispatch(A,y(0,-z),y(0,0),y(0,0),y(-x,0))}else{throw"align: not implemented"}}}}}},getScaledTreePosition:function(B,D){var C=this.node;var x=B.getData("width");var A=B.getData("height");var z=(this.config.multitree&&("$orn" in B.data)&&B.data.$orn)||this.config.orientation;var y=function(E,w){return function(){return B.pos.add(new p(E,w)).$scale(1-D)}};if(C.align=="left"){return this.dispatch(z,y(0,A),y(0,0),y(0,0),y(x,0))}else{if(C.align=="center"){return this.dispatch(z,y(0,A/2),y(-x/2,0),y(0,-A/2),y(x/2,0))}else{if(C.align=="right"){return this.dispatch(z,y(0,0),y(-x,0),y(0,-A),y(0,0))}else{throw"align: not implemented"}}}},treeFitsInCanvas:function(B,w,C){var y=w.getSize();var z=(this.config.multitree&&("$orn" in B.data)&&B.data.$orn)||this.config.orientation;var x=this.dispatch(z,y.width,y.height);var A=this.getTreeBaseSize(B,C,function(E,D){return E===0||!D.anySubnode()});return(A=0){z.drawn=false;var D=x.getCtx();var B=C.geom.getScaledTreePosition(z,A);D.translate(B.x,B.y);D.scale(A,A)}this.plotTree(z,c.merge(w,{withLabels:true,hideLabels:!!A,plotSubtree:function(I,G){var F=y.multitree&&!("$orn" in z.data);var H=F&&z.getData("orns");return !F||H.indexOf(z.getData("orn"))>-1}}),E);if(A>=0){z.drawn=true}},getAlignedPos:function(B,z,w){var y=this.node;var A,x;if(y.align=="center"){A={x:B.x-z/2,y:B.y-w/2}}else{if(y.align=="left"){x=this.config.orientation;if(x=="bottom"||x=="top"){A={x:B.x-z/2,y:B.y}}else{A={x:B.x,y:B.y-w/2}}}else{if(y.align=="right"){x=this.config.orientation;if(x=="bottom"||x=="top"){A={x:B.x-z/2,y:B.y-w}}else{A={x:B.x-z,y:B.y-w/2}}}else{throw"align: not implemented"}}}return A},getOrientation:function(w){var y=this.config;var x=y.orientation;if(y.multitree){var z=w.nodeFrom;var A=w.nodeTo;x=(("$orn" in z.data)&&z.data.$orn)||(("$orn" in A.data)&&A.data.$orn)}return x}});$jit.ST.Label={};$jit.ST.Label.Native=new q({Implements:e.Label.Native,renderLabel:function(z,B,y){var x=z.getCtx(),D=B.pos.getc(true),A=B.getData("width"),w=B.getData("height"),C=this.viz.fx.getAlignedPos(D,A,w);x.fillText(B.name,C.x+A/2,C.y+w/2)}});$jit.ST.Label.DOM=new q({Implements:e.Label.DOM,placeLabel:function(P,J,F){var B=J.pos.getc(true),O=this.viz.config,K=O.Node,x=this.viz.canvas,C=J.getData("width"),M=J.getData("height"),y=x.getSize(),G,N;var A=x.translateOffsetX,z=x.translateOffsetY,E=x.scaleOffsetX,D=x.scaleOffsetY,I=B.x*E+A,H=B.y*D+z;if(K.align=="center"){G={x:Math.round(I-C/2+y.width/2),y:Math.round(H-M/2+y.height/2)}}else{if(K.align=="left"){N=O.orientation;if(N=="bottom"||N=="top"){G={x:Math.round(I-C/2+y.width/2),y:Math.round(H+y.height/2)}}else{G={x:Math.round(I+y.width/2),y:Math.round(H-M/2+y.height/2)}}}else{if(K.align=="right"){N=O.orientation;if(N=="bottom"||N=="top"){G={x:Math.round(I-C/2+y.width/2),y:Math.round(H-M+y.height/2)}}else{G={x:Math.round(I-C+y.width/2),y:Math.round(H-M/2+y.height/2)}}}else{throw"align: not implemented"}}}var L=P.style;L.left=G.x+"px";L.top=G.y+"px";L.display=this.fitsInCanvas(G,x)?"":"none";F.onPlaceLabel(P,J)}});$jit.ST.Label.SVG=new q({Implements:[$jit.ST.Label.DOM,e.Label.SVG],initialize:function(w){this.viz=w}});$jit.ST.Label.HTML=new q({Implements:[$jit.ST.Label.DOM,e.Label.HTML],initialize:function(w){this.viz=w}});$jit.ST.Plot.NodeTypes=new q({none:{render:c.empty,contains:c.lambda(false)},circle:{render:function(x,w){var z=x.getData("dim"),A=this.getAlignedPos(x.pos.getc(true),z,z),y=z/2;this.nodeHelper.circle.render("fill",{x:A.x+y,y:A.y+y},y,w)},contains:function(w,A){var y=w.getData("dim"),z=this.getAlignedPos(w.pos.getc(true),y,y),x=y/2;this.nodeHelper.circle.contains({x:z.x+x,y:z.y+x},A,x)}},square:{render:function(x,w){var z=x.getData("dim"),y=z/2,A=this.getAlignedPos(x.pos.getc(true),z,z);this.nodeHelper.square.render("fill",{x:A.x+y,y:A.y+y},y,w)},contains:function(w,A){var y=w.getData("dim"),z=this.getAlignedPos(w.pos.getc(true),y,y),x=y/2;this.nodeHelper.square.contains({x:z.x+x,y:z.y+x},A,x)}},ellipse:{render:function(z,x){var y=z.getData("width"),w=z.getData("height"),A=this.getAlignedPos(z.pos.getc(true),y,w);this.nodeHelper.ellipse.render("fill",{x:A.x+y/2,y:A.y+w/2},y,w,x)},contains:function(y,A){var x=y.getData("width"),w=y.getData("height"),z=this.getAlignedPos(y.pos.getc(true),x,w);this.nodeHelper.ellipse.contains({x:z.x+x/2,y:z.y+w/2},A,x,w)}},rectangle:{render:function(z,x){var y=z.getData("width"),w=z.getData("height"),A=this.getAlignedPos(z.pos.getc(true),y,w);this.nodeHelper.rectangle.render("fill",{x:A.x+y/2,y:A.y+w/2},y,w,x)},contains:function(y,A){var x=y.getData("width"),w=y.getData("height"),z=this.getAlignedPos(y.pos.getc(true),x,w);this.nodeHelper.rectangle.contains({x:z.x+x/2,y:z.y+w/2},A,x,w)}}});$jit.ST.Plot.EdgeTypes=new q({none:c.empty,line:{render:function(x,z){var y=this.getOrientation(x),A=x.nodeFrom,B=x.nodeTo,w=A._depth1&&D[0]!=y.id);this.edgeHelper.arrow.render(E,F,A,z,x)},contains:function(x,D){var y=this.getOrientation(x),z=x.nodeFrom,A=x.nodeTo,w=z._depth0||F[ah][1]>0)){var R=K+F[ah][0],P=E+F[ah][1],ag=Math.atan((P-R)/w),Z=55;var V=M.createLinearGradient(ab+w/2,aa-(R+P)/2,ab+w/2+Z*Math.sin(ag),aa-(R+P)/2+Z*Math.cos(ag));var Q=c.rgbToHex(c.map(c.hexToRgb(I[ah%C].slice(1)),function(x){return(x*0.85)>>0}));V.addColorStop(0,I[ah%C]);V.addColorStop(1,Q);M.fillStyle=V}M.beginPath();M.moveTo(ab,aa-K);M.lineTo(ab+w,aa-E);M.lineTo(ab+w,aa-E-F[ah][1]);M.lineTo(ab,aa-K-F[ah][0]);M.lineTo(ab,aa-K);M.fill();M.restore();if(H){var S=H.name==L[ah];var z=S?0.7:0.8;var Q=c.rgbToHex(c.map(c.hexToRgb(I[ah%C].slice(1)),function(x){return(x*z)>>0}));M.strokeStyle=Q;M.lineWidth=S?4:1;M.save();M.beginPath();if(H.index===0){M.moveTo(ab,aa-K);M.lineTo(ab,aa-K-F[ah][0])}else{M.moveTo(ab+w,aa-E);M.lineTo(ab+w,aa-E-F[ah][1])}M.stroke();M.restore()}K+=(F[ah][0]||0);E+=(F[ah][1]||0);if(F[ah][0]>0){X+=(B[ah][0]||0)}}if(T&&ae.type=="Native"){M.save();M.beginPath();M.fillStyle=M.strokeStyle=ae.color;M.font=ae.style+" "+ae.size+"px "+ae.family;M.textAlign="center";M.textBaseline="middle";var O=N(W.name,ad,ac,W,X);if(O!==false){M.fillText(O!==true?O:X,ab,aa-K-Y.labelOffset-ae.size/2,w)}if(ai(W.name,ad,ac,W)){M.fillText(W.name,ab,aa+ae.size/2+Y.labelOffset)}M.restore()}}},contains:function(C,E){var J=C.pos.getc(true),z=C.getData("width"),N=C.getData("height"),M=this.getAlignedPos(J,z,N),L=M.x,K=M.y,O=C.getData("dimArray"),w=E.x-L;if(E.xL+z||E.y>K||E.y=G){var H=+(w>z/2);return{name:C.getData("stringArray")[F],color:C.getData("colorArray")[F],value:C.getData("valueArray")[F][H],index:H}}}return false}}});$jit.AreaChart=new q({st:null,colors:["#416D9C","#70A35E","#EBB056","#C74243","#83548B","#909291","#557EAA"],selected:{},busy:false,initialize:function(y){this.controller=this.config=c.merge(n("Canvas","Margin","Label","AreaChart"),{Label:{type:"Native"}},y);var z=this.config.showLabels,x=c.type(z),A=this.config.showAggregates,w=c.type(A);this.config.showLabels=x=="function"?z:c.lambda(z);this.config.showAggregates=w=="function"?A:c.lambda(A);this.initializeViz()},initializeViz:function(){var x=this.config,B=this,w=x.type.split(":")[0],A={};var z=new $jit.ST({injectInto:x.injectInto,width:x.width,height:x.height,orientation:"bottom",levelDistance:0,siblingOffset:0,subtreeOffset:0,withLabels:x.Label.type!="Native",useCanvas:x.useCanvas,Label:{type:x.Label.type},Node:{overridable:true,type:"areachart-"+w,align:"left",width:1,height:1},Edge:{type:"none"},Tips:{enable:x.Tips.enable,type:"Native",force:true,onShow:function(G,F,D){var E=D;x.Tips.onShow(G,E,F)}},Events:{enable:true,type:"Native",onClick:function(F,G,D){if(!x.filterOnClick&&!x.Events.enable){return}var E=G.getContains();if(E){x.filterOnClick&&B.filter(E.name)}x.Events.enable&&x.Events.onClick(E,G,D)},onRightClick:function(E,F,D){if(!x.restoreOnRightClick){return}B.restore()},onMouseMove:function(F,G,D){if(!x.selectOnHover){return}if(F){var E=G.getContains();B.select(F.id,E.name,E.index)}else{B.select(false,false,false)}}},onCreateLabel:function(J,G){var P=x.Label,O=G.getData("valueArray"),H=c.reduce(O,function(Q,R){return Q+R[0]},0),M=c.reduce(O,function(Q,R){return Q+R[1]},0);if(G.getData("prev")){var L={wrapper:document.createElement("div"),aggregate:document.createElement("div"),label:document.createElement("div")};var D=L.wrapper,N=L.label,E=L.aggregate,F=D.style,K=N.style,I=E.style;A[G.id]=L;D.appendChild(N);D.appendChild(E);if(!x.showLabels(G.name,H,M,G)){N.style.display="none"}if(!x.showAggregates(G.name,H,M,G)){E.style.display="none"}F.position="relative";F.overflow="visible";F.fontSize=P.size+"px";F.fontFamily=P.family;F.color=P.color;F.textAlign="center";I.position=K.position="absolute";J.style.width=G.getData("width")+"px";J.style.height=G.getData("height")+"px";N.innerHTML=G.name;J.appendChild(D)}},onPlaceLabel:function(V,P){if(!P.getData("prev")){return}var T=A[P.id],E=T.wrapper.style,D=T.label.style,O=T.aggregate.style,M=P.getData("width"),K=P.getData("height"),J=P.getData("dimArray"),G=P.getData("valueArray"),L=c.reduce(G,function(W,X){return W+X[0]},0),H=c.reduce(G,function(W,X){return W+X[1]},0),I=parseInt(E.fontSize,10),N=V.style;if(J&&G){if(x.showLabels(P.name,L,H,P)){D.display=""}else{D.display="none"}var F=x.showAggregates(P.name,L,H,P);if(F!==false){O.display=""}else{O.display="none"}E.width=O.width=D.width=V.style.width=M+"px";O.left=D.left=-M/2+"px";for(var S=0,Q=G.length,R=0,U=0;S0){R+=G[S][0];U+=J[S][0]}}O.top=(-I-x.labelOffset)+"px";D.top=(x.labelOffset+U)+"px";V.style.top=parseInt(V.style.top,10)-U+"px";V.style.height=E.height=U+"px";T.aggregate.innerHTML=F!==true?F:R}}});var y=z.canvas.getSize(),C=x.Margin;z.config.offsetY=-y.height/2+C.bottom+(x.showLabels&&(x.labelOffset+x.Label.size));z.config.offsetX=(C.right-C.left)/2;this.delegate=z;this.canvas=this.delegate.canvas},loadJSON:function(N){var J=c.time(),B=[],M=this.delegate,Q=c.splat(N.label),I=c.splat(N.color||this.colors),O=this.config,x=!!O.type.split(":")[1],z=O.animate;for(var K=0,y=N.values,H=y.length;K-1)?G:[0,0]}),"end")});this.delegate.fx.animate({modes:["node-property:dimArray"],duration:1500,onComplete:function(){y.busy=false;A&&A.onComplete()}})},restore:function(x){if(this.busy){return}this.busy=true;if(this.config.Tips.enable){this.delegate.tips.hide()}this.select(false,false,false);this.normalizeDims();var w=this;this.delegate.fx.animate({modes:["node-property:height:dimArray"],duration:1500,onComplete:function(){w.busy=false;x&&x.onComplete()}})},select:function(B,x,w){if(!this.config.selectOnHover){return}var y=this.selected;if(y.id!=B||y.name!=x||y.index!=w){y.id=B;y.name=x;y.index=w;this.delegate.graph.eachNode(function(C){C.setData("border",false)});if(B){var A=this.delegate.graph.getNode(B);A.setData("border",y);var z=w===0?"prev":"next";z=A.getData(z);if(z){A=this.delegate.graph.getByName(z);if(A){A.setData("border",{name:x,index:1-w})}}}this.delegate.plot()}},getLegend:function(){var y={};var z;this.delegate.graph.getNode(this.delegate.root).eachAdjacency(function(A){z=A.nodeTo});var x=z.getData("colorArray"),w=x.length;c.each(z.getData("stringArray"),function(B,A){y[B]=x[A%w]});return y},getMaxValue:function(){var w=0;this.delegate.graph.eachNode(function(B){var y=B.getData("valueArray"),x=0,A=0;c.each(y,function(C){x+=+C[0];A+=+C[1]});var z=A>x?A:x;w=w>z?w:z});return w},normalizeDims:function(){var C=this.delegate.graph.getNode(this.delegate.root),z=0;C.eachAdjacency(function(){z++});var B=this.getMaxValue()||1,F=this.delegate.canvas.getSize(),y=this.config,A=y.Margin,D=y.labelOffset+y.Label.size,w=(F.width-(A.left+A.right))/z,x=y.animate,E=F.height-(A.top+A.bottom)-(y.showAggregates&&D)-(y.showLabels&&D);this.delegate.graph.eachNode(function(L){var I=0,K=0,G=[];c.each(L.getData("valueArray"),function(M){I+=+M[0];K+=+M[1];G.push([0,0])});var J=K>I?K:I;L.setData("width",w);if(x){L.setData("height",J*E/B,"end");L.setData("dimArray",c.map(L.getData("valueArray"),function(M){return[M[0]*E/B,M[1]*E/B]}),"end");var H=L.getData("dimArray");if(!H){L.setData("dimArray",G)}}else{L.setData("height",J*E/B);L.setData("dimArray",c.map(L.getData("valueArray"),function(M){return[M[0]*E/B,M[1]*E/B]}))}})}});n.BarChart={$extend:true,animate:true,type:"stacked",labelOffset:3,barsOffset:0,hoveredColor:"#9fd4ff",orientation:"horizontal",showAggregates:true,showLabels:true,Tips:{enable:false,onShow:c.empty,onHide:c.empty},Events:{enable:false,onClick:c.empty}};$jit.ST.Plot.NodeTypes.implement({"barchart-stacked":{render:function(R,C){var H=R.pos.getc(true),Q=R.getData("width"),O=R.getData("height"),M=this.getAlignedPos(H,Q,O),L=M.x,K=M.y,N=R.getData("dimArray"),F=R.getData("valueArray"),E=R.getData("colorArray"),B=E.length,Y=R.getData("stringArray");var T=C.getCtx(),w={},U=R.getData("border"),z=R.getData("gradient"),aa=R.getData("config"),A=aa.orientation=="horizontal",D=aa.showAggregates,P=aa.showLabels,J=aa.Label;if(E&&N&&Y){for(var X=0,S=N.length,W=0,G=0;X>0}));Z.addColorStop(0,V);Z.addColorStop(0.5,E[X%B]);Z.addColorStop(1,V);T.fillStyle=Z}if(A){T.fillRect(L+W,K,N[X],O)}else{T.fillRect(L,K-W-N[X],Q,N[X])}if(U&&U.name==Y[X]){w.acum=W;w.dimValue=N[X]}W+=(N[X]||0);G+=(F[X]||0)}if(U){T.save();T.lineWidth=2;T.strokeStyle=U.color;if(A){T.strokeRect(L+w.acum+1,K+1,w.dimValue-2,O-2)}else{T.strokeRect(L+1,K-w.acum-w.dimValue+1,Q-2,w.dimValue-2)}T.restore()}if(J.type=="Native"){T.save();T.fillStyle=T.strokeStyle=J.color;T.font=J.style+" "+J.size+"px "+J.family;T.textBaseline="middle";var I=D(R.name,G,R);if(I!==false){I=I!==true?I:G;if(A){T.textAlign="right";T.fillText(I,L+W-aa.labelOffset,K+O/2)}else{T.textAlign="center";T.fillText(I,L+Q/2,K-O-J.size/2-aa.labelOffset)}}if(P(R.name,G,R)){if(A){T.textAlign="center";T.translate(L-aa.labelOffset-J.size/2,K+O/2);T.rotate(Math.PI/2);T.fillText(R.name,0,0)}else{T.textAlign="center";T.fillText(R.name,L+Q/2,K+J.size/2+aa.labelOffset)}}T.restore()}}},contains:function(D,F){var I=D.pos.getc(true),A=D.getData("width"),N=D.getData("height"),M=this.getAlignedPos(I,A,N),L=M.x,J=M.y,O=D.getData("dimArray"),B=D.getData("config"),z=F.x-L,w=B.orientation=="horizontal";if(w){if(F.xL+A||F.y>J+N||F.yL+A||F.y>J||F.y=H){return{name:D.getData("stringArray")[G],color:D.getData("colorArray")[G],value:D.getData("valueArray")[G],label:D.name}}}}return false}},"barchart-grouped":{render:function(S,C){var I=S.pos.getc(true),R=S.getData("width"),P=S.getData("height"),N=this.getAlignedPos(I,R,P),M=N.x,L=N.y,O=S.getData("dimArray"),G=S.getData("valueArray"),Y=G.length,F=S.getData("colorArray"),B=F.length,aa=S.getData("stringArray");var U=C.getCtx(),w={},V=S.getData("border"),z=S.getData("gradient"),ac=S.getData("config"),A=ac.orientation=="horizontal",E=ac.showAggregates,Q=ac.showLabels,K=ac.Label,D=(A?P:R)/Y;if(F&&O&&aa){for(var Z=0,T=Y,X=0,H=0;Z>0}));ab.addColorStop(0,W);ab.addColorStop(0.5,F[Z%B]);ab.addColorStop(1,W);U.fillStyle=ab}if(A){U.fillRect(M,L+D*Z,O[Z],D)}else{U.fillRect(M+D*Z,L-O[Z],D,O[Z])}if(V&&V.name==aa[Z]){w.acum=D*Z;w.dimValue=O[Z]}X+=(O[Z]||0);H+=(G[Z]||0)}if(V){U.save();U.lineWidth=2;U.strokeStyle=V.color;if(A){U.strokeRect(M+1,L+w.acum+1,w.dimValue-2,D-2)}else{U.strokeRect(M+w.acum+1,L-w.dimValue+1,D-2,w.dimValue-2)}U.restore()}if(K.type=="Native"){U.save();U.fillStyle=U.strokeStyle=K.color;U.font=K.style+" "+K.size+"px "+K.family;U.textBaseline="middle";var J=E(S.name,H,S);if(J!==false){J=J!==true?J:H;if(A){U.textAlign="right";U.fillText(J,M+Math.max.apply(null,O)-ac.labelOffset,L+P/2)}else{U.textAlign="center";U.fillText(J,M+R/2,L-Math.max.apply(null,O)-K.size/2-ac.labelOffset)}}if(Q(S.name,H,S)){if(A){U.textAlign="center";U.translate(M-ac.labelOffset-K.size/2,L+P/2);U.rotate(Math.PI/2);U.fillText(S.name,0,0)}else{U.textAlign="center";U.fillText(S.name,M+R/2,L+K.size/2+ac.labelOffset)}}U.restore()}}},contains:function(J,F){var B=J.pos.getc(true),I=J.getData("width"),H=J.getData("height"),E=this.getAlignedPos(B,I,H),D=E.x,C=E.y,G=J.getData("dimArray"),M=G.length,P=J.getData("config"),A=F.x-D,w=P.orientation=="horizontal",z=(w?H:I)/M;if(w){if(F.xD+I||F.y>C+H||F.yD+I||F.y>C||F.y=N&&F.y<=N+z){return{name:J.getData("stringArray")[L],color:J.getData("colorArray")[L],value:J.getData("valueArray")[L],label:J.name}}}else{var N=D+z*L;if(F.x>=N&&F.x<=N+z&&F.y>=C-O){return{name:J.getData("stringArray")[L],color:J.getData("colorArray")[L],value:J.getData("valueArray")[L],label:J.name}}}}return false}}});$jit.BarChart=new q({st:null,colors:["#416D9C","#70A35E","#EBB056","#C74243","#83548B","#909291","#557EAA"],selected:{},busy:false,initialize:function(y){this.controller=this.config=c.merge(n("Canvas","Margin","Label","BarChart"),{Label:{type:"Native"}},y);var z=this.config.showLabels,x=c.type(z),A=this.config.showAggregates,w=c.type(A);this.config.showLabels=x=="function"?z:c.lambda(z);this.config.showAggregates=w=="function"?A:c.lambda(A);this.initializeViz()},initializeViz:function(){var x=this.config,B=this;var w=x.type.split(":")[0],D=x.orientation=="horizontal",A={};var z=new $jit.ST({injectInto:x.injectInto,width:x.width,height:x.height,orientation:D?"left":"bottom",levelDistance:0,siblingOffset:x.barsOffset,subtreeOffset:0,withLabels:x.Label.type!="Native",useCanvas:x.useCanvas,Label:{type:x.Label.type},Node:{overridable:true,type:"barchart-"+w,align:"left",width:1,height:1},Edge:{type:"none"},Tips:{enable:x.Tips.enable,type:"Native",force:true,onShow:function(H,G,E){var F=E;x.Tips.onShow(H,F,G)}},Events:{enable:true,type:"Native",onClick:function(G,H,E){if(!x.Events.enable){return}var F=H.getContains();x.Events.onClick(F,H,E)},onMouseMove:function(G,H,E){if(!x.hoveredColor){return}if(G){var F=H.getContains();B.select(G.id,F.name,F.index)}else{B.select(false,false,false)}}},onCreateLabel:function(J,H){var P=x.Label,N=H.getData("valueArray"),M=c.reduce(N,function(Q,R){return Q+R},0);var L={wrapper:document.createElement("div"),aggregate:document.createElement("div"),label:document.createElement("div")};var E=L.wrapper,O=L.label,F=L.aggregate,G=E.style,K=O.style,I=F.style;A[H.id]=L;E.appendChild(O);E.appendChild(F);if(!x.showLabels(H.name,M,H)){K.display="none"}if(!x.showAggregates(H.name,M,H)){I.display="none"}G.position="relative";G.overflow="visible";G.fontSize=P.size+"px";G.fontFamily=P.family;G.color=P.color;G.textAlign="center";I.position=K.position="absolute";J.style.width=H.getData("width")+"px";J.style.height=H.getData("height")+"px";I.left=K.left="0px";O.innerHTML=H.name;J.appendChild(E)},onPlaceLabel:function(U,P){if(!A[P.id]){return}var T=A[P.id],G=T.wrapper.style,E=T.label.style,O=T.aggregate.style,V=x.type.split(":")[0]=="grouped",F=x.orientation=="horizontal",K=P.getData("dimArray"),I=P.getData("valueArray"),M=(V&&F)?Math.max.apply(null,K):P.getData("width"),L=(V&&!F)?Math.max.apply(null,K):P.getData("height"),J=parseInt(G.fontSize,10),N=U.style;if(K&&I){G.width=O.width=E.width=U.style.width=M+"px";for(var S=0,Q=I.length,R=0;S0){R+=I[S]}}if(x.showLabels(P.name,R,P)){E.display=""}else{E.display="none"}var H=x.showAggregates(P.name,R,P);if(H!==false){O.display=""}else{O.display="none"}if(x.orientation=="horizontal"){O.textAlign="right";E.textAlign="left";E.textIndex=O.textIndent=x.labelOffset+"px";O.top=E.top=(L-J)/2+"px";U.style.height=G.height=L+"px"}else{O.top=(-J-x.labelOffset)+"px";E.top=(x.labelOffset+L)+"px";U.style.top=parseInt(U.style.top,10)-L+"px";U.style.height=G.height=L+"px"}T.aggregate.innerHTML=H!==true?H:R}}});var y=z.canvas.getSize(),C=x.Margin;if(D){z.config.offsetX=y.width/2-C.left-(x.showLabels&&(x.labelOffset+x.Label.size));z.config.offsetY=(C.bottom-C.top)/2}else{z.config.offsetY=-y.height/2+C.bottom+(x.showLabels&&(x.labelOffset+x.Label.size));z.config.offsetX=(C.right-C.left)/2}this.delegate=z;this.canvas=this.delegate.canvas},loadJSON:function(K){if(this.busy){return}this.busy=true;var H=c.time(),C=[],J=this.delegate,N=c.splat(K.label),G=c.splat(K.color||this.colors),L=this.config,w=!!L.type.split(":")[1],z=L.animate,y=L.orientation=="horizontal",A=this;for(var I=0,x=K.values,E=x.length;Iz?x:z});return x},setBarType:function(w){this.config.type=w;this.delegate.config.Node.type="barchart-"+w.split(":")[0]},normalizeDims:function(){var G=this.delegate.graph.getNode(this.delegate.root),B=0;G.eachAdjacency(function(){B++});var D=this.getMaxValue()||1,J=this.delegate.canvas.getSize(),z=this.config,C=z.Margin,H=C.left+C.right,A=C.top+C.bottom,x=z.orientation=="horizontal",w=(J[x?"height":"width"]-(x?A:H)-(B-1)*z.barsOffset)/B,y=z.animate,I=J[x?"width":"height"]-(x?H:A)-(!x&&z.showAggregates&&(z.Label.size+z.labelOffset))-(z.showLabels&&(z.Label.size+z.labelOffset)),F=x?"height":"width",E=x?"width":"height";this.delegate.graph.eachNode(function(N){var M=0,K=[];c.each(N.getData("valueArray"),function(O){M+=+O;K.push(0)});N.setData(F,w);if(y){N.setData(E,M*I/D,"end");N.setData("dimArray",c.map(N.getData("valueArray"),function(O){return O*I/D}),"end");var L=N.getData("dimArray");if(!L){N.setData("dimArray",K)}}else{N.setData(E,M*I/D);N.setData("dimArray",c.map(N.getData("valueArray"),function(O){return O*I/D}))}})}});n.PieChart={$extend:true,animate:true,offset:25,sliceOffset:0,labelOffset:3,type:"stacked",hoveredColor:"#9fd4ff",Events:{enable:false,onClick:c.empty},Tips:{enable:false,onShow:c.empty,onHide:c.empty},showLabels:true,resizeLabels:false,updateHeights:false};g.Radial=new q({compute:function(x){var y=c.splat(x||["current","start","end"]);f.compute(this.graph,y,this.config);this.graph.computeLevels(this.root,0,"ignore");var w=this.createLevelDistanceFunc();this.computeAngularWidths(y);this.computePositions(y,w)},computePositions:function(D,A){var F=D;var E=this.graph;var B=E.getNode(this.root);var C=this.parent;var w=this.config;for(var y=0,x=F.length;yJ[Z]?Y:J[Z]):Y}G.push(W)},"ignore");if(C&&C.id==K.id&&G.length>0&&G[0].dist){G.sort(function(W,V){return(W.dist>=V.dist)-(W.dist<=V.dist)})}for(var M=0,O=G.length;MF/2&&B.theta<3*F/2);var L=I?B.theta+F:B.theta;if(I){M-=Math.abs(Math.cos(B.theta)*A.width);K+=Math.sin(B.theta)*A.width}else{if(E.id==this.viz.root){M-=A.width/2}}}O.save();O.translate(M,K);O.rotate(L);O.fillText(E.name,0,0);O.restore()}});w.Label.SVG=new q({Implements:e.Label.SVG,initialize:function(x){this.viz=x},placeLabel:function(N,C,E){var J=C.pos.getc(true),M=this.viz,A=this.viz.canvas;var F=A.getSize();var B={x:Math.round(J.x+F.width/2),y:Math.round(J.y+F.height/2)};N.setAttribute("x",B.x);N.setAttribute("y",B.y);var G=N.getBBox();if(G){var L=N.getAttribute("x");var I=N.getAttribute("y");var z=C.pos.getp(true);var D=Math.PI;var H=(z.theta>D/2&&z.theta<3*D/2);if(H){N.setAttribute("x",L-G.width);N.setAttribute("y",I-G.height)}else{if(C.id==M.root){N.setAttribute("x",L-G.width/2)}}var K=H?z.theta+D:z.theta;if(C._depth){N.setAttribute("transform","rotate("+K*360/(2*D)+" "+L+" "+I+")")}}E.onPlaceLabel(N,C)}});w.Label.HTML=new q({Implements:e.Label.HTML,initialize:function(x){this.viz=x},placeLabel:function(G,A,C){var E=A.pos.clone(),y=this.viz.canvas,F=A.getData("height"),B=((F||A._depth==0)?F:this.viz.config.levelDistance)/2,D=y.getSize();E.rho+=B;E=E.getc(true);var z={x:Math.round(E.x+D.width/2),y:Math.round(E.y+D.height/2)};var x=G.style;x.left=z.x+"px";x.top=z.y+"px";x.display=this.fitsInCanvas(z,y)?"":"none";C.onPlaceLabel(G,A)}});w.Plot.NodeTypes=new q({none:{render:c.empty,contains:c.lambda(false),anglecontains:function(B,D){var A=B.getData("span")/2,y=B.pos.theta;var z=y-A,x=y+A;if(z<0){z+=Math.PI*2}var C=Math.atan2(D.y,D.x);if(C<0){C+=Math.PI*2}if(z>x){return(C>z&&C<=Math.PI*2)||Cz&&C=z*C)&&(y<=(z*C+B))}return false}},"gradient-multipie":{render:function(A,x){var F=x.getCtx();var E=A.getData("height");var B=E?E:this.config.levelDistance;var y=F.createRadialGradient(0,0,A.getPos().rho,0,0,A.getPos().rho+B);var D=c.hexToRgb(A.getData("color")),C=[];c.each(D,function(G){C.push(parseInt(G*0.5,10))});var z=c.rgbToHex(C);y.addColorStop(0,z);y.addColorStop(1,A.getData("color"));F.fillStyle=y;this.nodeTypes.multipie.render.call(this,A,x)},contains:function(x,y){return this.nodeTypes.multipie.contains.call(this,x,y)}},"gradient-pie":{render:function(C,z){var x=z.getCtx();var D=x.createRadialGradient(0,0,0,0,0,C.getPos().rho);var B=c.hexToRgb(C.getData("color")),y=[];c.each(B,function(E){y.push(parseInt(E*0.5,10))});var A=c.rgbToHex(y);D.addColorStop(1,A);D.addColorStop(0,C.getData("color"));x.fillStyle=D;this.nodeTypes.pie.render.call(this,C,z)},contains:function(x,y){return this.nodeTypes.pie.contains.call(this,x,y)}}});w.Plot.EdgeTypes=new q({none:c.empty,line:{render:function(x,y){var A=x.nodeFrom.pos.getc(true),z=x.nodeTo.pos.getc(true);this.edgeHelper.line.render(A,z,y)},contains:function(x,A){var z=x.nodeFrom.pos.getc(true),y=x.nodeTo.pos.getc(true);return this.edgeHelper.line.contains(z,y,A,this.edge.epsilon)}},arrow:{render:function(y,z){var D=y.nodeFrom.pos.getc(true),C=y.nodeTo.pos.getc(true),B=y.getData("dim"),A=y.data.$direction,x=(A&&A.length>1&&A[0]!=y.nodeFrom.id);this.edgeHelper.arrow.render(D,C,B,x,z)},contains:function(x,A){var z=x.nodeFrom.pos.getc(true),y=x.nodeTo.pos.getc(true);return this.edgeHelper.arrow.contains(z,y,A,this.edge.epsilon)}},hyperline:{render:function(x,y){var B=x.nodeFrom.pos.getc(),A=x.nodeTo.pos.getc(),z=Math.max(B.norm(),A.norm());this.edgeHelper.hyperline.render(B.$scale(1/z),A.$scale(1/z),z,y)},contains:c.lambda(false)}})})($jit.Sunburst);$jit.Sunburst.Plot.NodeTypes.implement({"piechart-stacked":{render:function(U,A){var T=U.pos.getp(true),C=U.getData("dimArray"),S=U.getData("valueArray"),G=U.getData("colorArray"),z=G.length,M=U.getData("stringArray"),P=U.getData("span")/2,K=U.pos.theta,F=K-P,J=K+P,R=new b;var N=A.getCtx(),L={},I=U.getData("gradient"),D=U.getData("border"),Z=U.getData("config"),ai=Z.showLabels,Y=Z.resizeLabels,ab=Z.Label;var ae=Z.sliceOffset*Math.cos((F+J)/2);var E=Z.sliceOffset*Math.sin((F+J)/2);if(G&&C&&M){for(var af=0,ac=C.length,w=0,X=0;af>0}),y=c.rgbToHex(W);ad.addColorStop(0,ag);ad.addColorStop(0.5,ag);ad.addColorStop(1,y);N.fillStyle=ad}R.rho=w+Z.sliceOffset;R.theta=F;var ah=R.getc(true);R.theta=J;var O=R.getc(true);R.rho+=B;var aj=R.getc(true);R.theta=F;var Q=R.getc(true);N.beginPath();N.arc(ae,E,w+0.01,F,J,false);N.arc(ae,E,w+B+0.01,J,F,true);N.fill();if(D&&D.name==M[af]){L.acum=w;L.dimValue=C[af];L.begin=F;L.end=J}w+=(B||0);X+=(S[af]||0)}if(D){N.save();N.globalCompositeOperation="source-over";N.lineWidth=2;N.strokeStyle=D.color;var aa=F>0;H=H<+Y?+Y:H;N.font=ab.style+" "+H+"px "+ab.family;N.textBaseline="middle";N.textAlign="center";R.rho=w+Z.labelOffset+Z.sliceOffset;R.theta=U.pos.theta;var ak=R.getc(true);N.fillText(U.name,ak.x,ak.y);N.restore()}}},contains:function(z,D){if(this.nodeTypes.none.anglecontains.call(this,z,D)){var F=Math.sqrt(D.x*D.x+D.y*D.y);var w=this.config.levelDistance,C=z._depth;var x=z.getData("config");if(F<=w*C+x.sliceOffset){var G=z.getData("dimArray");for(var B=0,A=G.length,E=x.sliceOffset;B=E&&F<=E+y){return{name:z.getData("stringArray")[B],color:z.getData("colorArray")[B],value:z.getData("valueArray")[B],label:z.name}}E+=y}}return false}return false}}});$jit.PieChart=new q({sb:null,colors:["#416D9C","#70A35E","#EBB056","#C74243","#83548B","#909291","#557EAA"],selected:{},busy:false,initialize:function(w){this.controller=this.config=c.merge(n("Canvas","PieChart","Label"),{Label:{type:"Native"}},w);this.initializeViz()},initializeViz:function(){var x=this.config,B=this;var w=x.type.split(":")[0];var A=new $jit.Sunburst({injectInto:x.injectInto,width:x.width,height:x.height,useCanvas:x.useCanvas,withLabels:x.Label.type!="Native",Label:{type:x.Label.type},Node:{overridable:true,type:"piechart-"+w,width:1,height:1},Edge:{type:"none"},Tips:{enable:x.Tips.enable,type:"Native",force:true,onShow:function(F,E,C){var D=C;x.Tips.onShow(F,D,E)}},Events:{enable:true,type:"Native",onClick:function(E,F,C){if(!x.Events.enable){return}var D=F.getContains();x.Events.onClick(D,F,C)},onMouseMove:function(E,F,C){if(!x.hoveredColor){return}if(E){var D=F.getContains();B.select(E.id,D.name,D.index)}else{B.select(false,false,false)}}},onCreateLabel:function(F,E){var C=x.Label;if(x.showLabels){var D=F.style;D.fontSize=C.size+"px";D.fontFamily=C.family;D.color=C.color;D.textAlign="center";F.innerHTML=E.name}},onPlaceLabel:function(S,M){if(!x.showLabels){return}var G=M.pos.getp(true),J=M.getData("dimArray"),P=M.getData("span")/2,H=M.pos.theta,R=H-P,D=H+P,U=new b;var L=x.showLabels,F=x.resizeLabels,I=x.Label;if(J){for(var Q=0,N=J.length,O=0;Q>0;C=C<+F?+F:C;S.style.fontSize=C+"px";U.rho=O+x.labelOffset+x.sliceOffset;U.theta=(R+D)/2;var G=U.getc(true);var E=B.canvas.getSize();var K={x:Math.round(G.x+E.width/2),y:Math.round(G.y+E.height/2)};S.style.left=K.x+"px";S.style.top=K.y+"px"}}});var z=A.canvas.getSize(),y=Math.min;A.config.levelDistance=y(z.width,z.height)/2-x.offset-x.sliceOffset;this.delegate=A;this.canvas=this.delegate.canvas;this.canvas.getCtx().globalCompositeOperation="lighter"},loadJSON:function(K){var H=c.time(),B=[],J=this.delegate,N=c.splat(K.label),D=N.length,G=c.splat(K.color||this.colors),y=G.length,L=this.config,w=!!L.type.split(":")[1],z=L.animate,F=D==1;for(var I=0,x=K.values,E=x.length;Iy?w:y});return w},normalizeDims:function(){var x=this.delegate.graph.getNode(this.delegate.root),w=0;x.eachAdjacency(function(){w++});var B=this.getMaxValue()||1,A=this.config,y=A.animate,z=this.delegate.config.levelDistance;this.delegate.graph.eachNode(function(G){var F=0,C=[];c.each(G.getData("valueArray"),function(H){F+=+H;C.push(1)});var E=(C.length==1)&&!A.updateHeights;if(y){G.setData("dimArray",c.map(G.getData("valueArray"),function(H){return E?z:(H*z/B)}),"end");var D=G.getData("dimArray");if(!D){G.setData("dimArray",C)}}else{G.setData("dimArray",c.map(G.getData("valueArray"),function(H){return E?z:(H*z/B)}))}G.setData("normalizedDim",F/B)})}});g.TM={};g.TM.SliceAndDice=new q({compute:function(B){var x=this.graph.getNode(this.clickedNode&&this.clickedNode.id||this.root);this.controller.onBeforeCompute(x);var z=this.canvas.getSize(),y=this.config,A=z.width,w=z.height;this.graph.computeLevels(this.root,0,"ignore");x.getPos(B).setc(-A/2,-w/2);x.setData("width",A,B);x.setData("height",w+y.titleHeight,B);this.computePositions(x,x,this.layout.orientation,B);this.controller.onAfterCompute(x)},computePositions:function(F,D,P,y){var M=0;F.eachSubnode(function(R){M+=R.getData("area",y)});var Q=this.config,N=Q.offset,J=F.getData("width",y),H=Math.max(F.getData("height",y)-Q.titleHeight,0),x=F==D?1:(D.getData("area",y)/M);var I,G,L,B,A,E,C;var O=(P=="h");if(O){P="v";I=H;G=J*x;L="height";B="y";A="x";E=Q.titleHeight;C=0}else{P="h";I=H*x;G=J;L="width";B="x";A="y";E=0;C=Q.titleHeight}var w=D.getPos(y);D.setData("width",G,y);D.setData("height",I,y);var K=0,z=this;D.eachSubnode(function(S){var R=S.getPos(y);R[B]=K+w[B]+E;R[A]=w[A]+C;z.computePositions(D,S,P,y);K+=S.getData(L,y)})}});g.TM.Area={compute:function(w){w=w||"current";var C=this.graph.getNode(this.clickedNode&&this.clickedNode.id||this.root);this.controller.onBeforeCompute(C);var y=this.config,F=this.canvas.getSize(),x=F.width,E=F.height,D=y.offset,z=x-D,B=E-D;this.graph.computeLevels(this.root,0,"ignore");C.getPos(w).setc(-x/2,-E/2);C.setData("width",x,w);C.setData("height",E,w);var A={top:-E/2+y.titleHeight,left:-x/2,width:z,height:B-y.titleHeight};this.computePositions(C,A,w);this.controller.onAfterCompute(C)},computeDim:function(B,C,E,A,z,x){if(B.length+C.length==1){var y=(B.length==1)?B:C;this.layoutLast(y,E,A,x);return}if(B.length>=2&&C.length==0){C=[B.shift()]}if(B.length==0){if(C.length>0){this.layoutRow(C,E,A,x)}return}var D=B[0];if(z(C,E)>=z([D].concat(C),E)){this.computeDim(B.slice(1),C.concat([D]),E,A,z,x)}else{var F=this.layoutRow(C,E,A,x);this.computeDim(B,[],F.dim,F,z,x)}},worstAspectRatio:function(x,F){if(!x||x.length==0){return Number.MAX_VALUE}var y=0,G=0,B=Number.MAX_VALUE;for(var D=0,C=x.length;Dz?G:z}var E=F*F,A=y*y;return Math.max(E*G/A,A/(E*B))},avgAspectRatio:function(B,y){if(!B||B.length==0){return Number.MAX_VALUE}var D=0;for(var z=0,x=B.length;zA?y/A:A/y}return D/x},layoutLast:function(y,x,B,A){var z=y[0];z.getPos(A).setc(B.left,B.top);z.setData("width",B.width,A);z.setData("height",B.height,A)}};g.TM.Squarified=new q({Implements:g.TM.Area,computePositions:function(A,D,x){var z=this.config,F=Math.max;if(D.width>=D.height){this.layout.orientation="h"}else{this.layout.orientation="v"}var w=A.getSubnodes([1,1],"ignore");if(w.length>0){this.processChildrenLayout(A,w,D,x);for(var C=0,B=w.length;C0){this.processChildrenLayout(A,w,D,x);for(var C=0,B=w.length;CF){F=I}});var y=this.graph.getNode(this.clickedNode&&this.clickedNode.id||D.id);var x=Math.min(F,C-1);var B=y._depth;if(this.layout.horizontal()){this.computeSubtree(y,-w/2,-G/2,w/(x+1),G,B,x,E)}else{this.computeSubtree(y,-w/2,-G/2,w,G/(x+1),B,x,E)}},computeSubtree:function(G,I,F,w,L,E,A,H){G.getPos(H).setc(I,F);G.setData("width",w,H);G.setData("height",L,H);var C,K=0,J=0;var z=e.Util.getSubnodes(G,[1,1],"ignore");if(!z.length){return}c.each(z,function(x){J+=x.getData("dim")});for(var D=0,B=z.length;D>0}));I.addColorStop(0,A);I.addColorStop(1,E);J.fillStyle=I}if(B){J.strokeStyle=B;J.lineWidth=3}J.fillRect(F,D,Math.max(0,w-C),Math.max(0,H-C));B&&J.strokeRect(G.x,G.y,w,H)},contains:function(y,A){if(this.viz.clickedNode&&!$jit.Graph.Util.isDescendantOf(y,this.viz.clickedNode.id)){return false}var z=y.pos.getc(true),x=y.getData("width"),w=y.getData("height");return this.nodeHelper.rectangle.contains({x:z.x+x/2,y:z.y+w/2},A,x,w)}}});$jit.Icicle.Plot.EdgeTypes=new q({none:c.empty});g.ForceDirected=new q({getOptions:function(D){var B=this.canvas.getSize();var y=B.width,A=B.height;var C=0;this.graph.eachNode(function(w){C++});var E=y*A/C,z=Math.sqrt(E);var x=this.config.levelDistance;return{width:y,height:A,tstart:y*0.1,nodef:function(w){return E/(w||1)},edgef:function(w){return z*(w-x)}}},compute:function(x,y){var z=c.splat(x||["current","start","end"]);var w=this.getOptions();f.compute(this.graph,z,this.config);this.graph.computeLevels(this.root,0,"ignore");this.graph.eachNode(function(A){c.each(z,function(B){var C=A.getPos(B);if(C.equals(p.KER)){C.x=w.width/5*(Math.random()-0.5);C.y=w.height/5*(Math.random()-0.5)}A.disp={};c.each(z,function(D){A.disp[D]=r(0,0)})})});this.computePositions(z,w,y)},computePositions:function(A,y,B){var C=this.config.iterations,x=0,z=this;if(B){(function w(){for(var E=B.iter,D=0;D=C){B.onComplete();return}}B.onStep(Math.round(x/(C-1)*100));setTimeout(w,1)})()}else{for(;x1&&A[0]!=y.nodeFrom.id);this.edgeHelper.arrow.render(D,C,B,x,z)},contains:function(x,A){var z=x.nodeFrom.pos.getc(true),y=x.nodeTo.pos.getc(true);return this.edgeHelper.arrow.contains(z,y,A,this.edge.epsilon)}}})})($jit.ForceDirected);$jit.TM={};var v=$jit.TM;$jit.TM.$extend=true;v.Base={layout:{orientation:"h",vertical:function(){return this.orientation=="v"},horizontal:function(){return this.orientation=="h"},change:function(){this.orientation=this.vertical()?"h":"v"}},initialize:function(w){var x={orientation:"h",titleHeight:13,offset:2,levelsToShow:0,constrained:false,animate:false,Node:{type:"rectangle",overridable:true,width:3,height:3,color:"#444"},Label:{textAlign:"center",textBaseline:"top"},Edge:{type:"none"},duration:700,fps:45};this.controller=this.config=c.merge(n("Canvas","Node","Edge","Fx","Controller","Tips","NodeStyles","Events","Navigation","Label"),x,w);this.layout.orientation=this.config.orientation;var y=this.config;if(y.useCanvas){this.canvas=y.useCanvas;this.config.labelContainer=this.canvas.id+"-label"}else{if(y.background){y.background=c.merge({type:"Circles"},y.background)}this.canvas=new l(this,y);this.config.labelContainer=(typeof y.injectInto=="string"?y.injectInto:y.injectInto.id)+"-label"}this.graphOptions={klass:p,Node:{selected:false,exist:true,drawn:true}};this.graph=new e(this.graphOptions,this.config.Node,this.config.Edge);this.labels=new v.Label[y.Label.type](this);this.fx=new v.Plot(this);this.op=new v.Op(this);this.group=new v.Group(this);this.geom=new v.Geom(this);this.clickedNode=null;this.busy=false;this.initializeExtras()},refresh:function(){if(this.busy){return}this.busy=true;var x=this;if(this.config.animate){this.compute("end");this.config.levelsToShow>0&&this.geom.setRightLevelToShow(this.graph.getNode(this.clickedNode&&this.clickedNode.id||this.root));this.fx.animate(c.merge(this.config,{modes:["linear","node-property:width:height"],onComplete:function(){x.busy=false}}))}else{var w=this.config.Label.type;if(w!="Native"){var x=this;this.graph.eachNode(function(y){x.labels.hideLabel(y,false)})}this.busy=false;this.compute();this.config.levelsToShow>0&&this.geom.setRightLevelToShow(this.graph.getNode(this.clickedNode&&this.clickedNode.id||this.root));this.plot()}},plot:function(){this.fx.plot()},leaf:function(w){return w.getSubnodes([1,1],"ignore").length==0},enter:function(C){if(this.busy){return}this.busy=true;var y=this,x=this.config,A=this.graph,w=C,z=this.clickedNode;var B={onComplete:function(){if(x.levelsToShow>0){y.geom.setRightLevelToShow(C)}if(x.levelsToShow>0||x.request){y.compute()}if(x.animate){A.nodeList.setData("alpha",0,"end");C.eachSubgraph(function(D){D.setData("alpha",1,"end")},"ignore");y.fx.animate({duration:500,modes:["node-property:alpha"],onComplete:function(){y.clickedNode=w;y.compute("end");y.clickedNode=z;y.fx.animate({modes:["linear","node-property:width:height"],duration:1000,onComplete:function(){y.busy=false;y.clickedNode=w}})}})}else{y.busy=false;y.clickedNode=C;y.refresh()}}};if(x.request){this.requestNodes(w,B)}else{B.onComplete()}},out:function(){if(this.busy){return}this.busy=true;this.events.hoveredNode=false;var A=this,y=this.config,C=this.graph,x=C.getNode(this.clickedNode&&this.clickedNode.id||this.root).getParents(),z=x[0],w=z,B=this.clickedNode;if(!z){this.busy=false;return}callback={onComplete:function(){A.clickedNode=z;if(y.request){A.requestNodes(z,{onComplete:function(){A.compute();A.plot();A.busy=false}})}else{A.compute();A.plot();A.busy=false}}};if(y.levelsToShow>0){this.geom.setRightLevelToShow(z)}if(y.animate){this.clickedNode=w;this.compute("end");this.clickedNode=B;this.fx.animate({modes:["linear","node-property:width:height"],duration:1000,onComplete:function(){A.clickedNode=w;C.eachNode(function(D){D.setDataset(["current","end"],{alpha:[0,1]})},"ignore");B.eachSubgraph(function(D){D.setData("alpha",1)},"ignore");A.fx.animate({duration:500,modes:["node-property:alpha"],onComplete:function(){callback.onComplete()}})}})}else{callback.onComplete()}},requestNodes:function(y,z){var x=c.merge(this.controller,z),w=this.config.levelsToShow;if(x.request){var B=[],A=y._depth;y.eachLevel(0,w,function(D){var C=w-(D._depth-A);if(D.drawn&&!D.anySubnode()&&C>0){B.push(D);D._level=C}});this.group.requestNodes(B,x)}else{x.onComplete()}},reposition:function(){this.compute("end")}};v.Op=new q({Implements:e.Op,initialize:function(w){this.viz=w}});v.Geom=new q({Implements:e.Geom,getRightLevelToShow:function(){return this.viz.config.levelsToShow},setRightLevelToShow:function(x){var y=this.getRightLevelToShow(),w=this.viz.labels;x.eachLevel(0,y+1,function(A){var z=A._depth-x._depth;if(z>y){A.drawn=false;A.exist=false;A.ignore=true;w.hideLabel(A,false)}else{A.drawn=true;A.exist=true;delete A.ignore}});x.drawn=true;delete x.ignore}});v.Group=new q({initialize:function(w){this.viz=w;this.canvas=w.canvas;this.config=w.config},requestNodes:function(B,A){var z=0,x=B.length,D={};var y=function(){A.onComplete()};var w=this.viz;if(x==0){y()}for(var C=0;C>0}));K.addColorStop(0,A);K.addColorStop(1,F);L.fillStyle=K}L.fillRect(G,E,w-I,J-I);if(B){L.save();L.strokeStyle=B;L.strokeRect(G,E,w-I,J-I);L.restore()}}else{if(C>0){L.fillRect(H.x+I/2,H.y+I/2,w-I,C-I);if(B){L.save();L.strokeStyle=B;L.strokeRect(H.x+I/2,H.y+I/2,w-I,J-I);L.restore()}}}},contains:function(z,B){if(this.viz.clickedNode&&!z.isDescendantOf(this.viz.clickedNode.id)||z.ignore){return false}var A=z.pos.getc(true),y=z.getData("width"),x=this.viz.leaf(z),w=x?z.getData("height"):this.config.titleHeight;return this.nodeHelper.rectangle.contains({x:A.x+y/2,y:A.y+w/2},B,y,w)}}});v.Plot.EdgeTypes=new q({none:c.empty});v.SliceAndDice=new q({Implements:[d,o,v.Base,g.TM.SliceAndDice]});v.Squarified=new q({Implements:[d,o,v.Base,g.TM.Squarified]});v.Strip=new q({Implements:[d,o,v.Base,g.TM.Strip]});$jit.RGraph=new q({Implements:[d,o,g.Radial],initialize:function(w){var x=$jit.RGraph;var y={interpolation:"linear",levelDistance:100};this.controller=this.config=c.merge(n("Canvas","Node","Edge","Fx","Controller","Tips","NodeStyles","Events","Navigation","Label"),y,w);var z=this.config;if(z.useCanvas){this.canvas=z.useCanvas;this.config.labelContainer=this.canvas.id+"-label"}else{if(z.background){z.background=c.merge({type:"Circles"},z.background)}this.canvas=new l(this,z);this.config.labelContainer=(typeof z.injectInto=="string"?z.injectInto:z.injectInto.id)+"-label"}this.graphOptions={klass:b,Node:{selected:false,exist:true,drawn:true}};this.graph=new e(this.graphOptions,this.config.Node,this.config.Edge);this.labels=new x.Label[z.Label.type](this);this.fx=new x.Plot(this,x);this.op=new x.Op(this);this.json=null;this.root=null;this.busy=false;this.parent=false;this.initializeExtras()},createLevelDistanceFunc:function(){var w=this.config.levelDistance;return function(x){return(x._depth+1)*w}},refresh:function(){this.compute();this.plot()},reposition:function(){this.compute("end")},plot:function(){this.fx.plot()},getNodeAndParentAngle:function(D){var y=false;var C=this.graph.getNode(D);var A=C.getParents();var z=(A.length>0)?A[0]:false;if(z){var w=z.pos.getc(),B=C.pos.getc();var x=w.add(B.scale(-1));y=Math.atan2(x.y,x.x);if(y<0){y+=2*Math.PI}}return{parent:z,theta:y}},tagChildren:function(A,C){if(A.angleSpan){var B=[];A.eachAdjacency(function(D){B.push(D.nodeTo)},"ignore");var w=B.length;for(var z=0;z1&&A[0]!=y.nodeFrom.id);this.edgeHelper.arrow.render(D,C,B,x,z)},contains:function(x,A){var z=x.nodeFrom.pos.getc(true),y=x.nodeTo.pos.getc(true);return this.edgeHelper.arrow.contains(z,y,A,this.edge.epsilon)}}})})($jit.RGraph);p.prototype.moebiusTransformation=function(y){var w=this.add(y);var x=y.$conjugate().$prod(this);x.x++;return w.$div(x)};e.Util.moebiusTransformation=function(y,A,z,x,w){this.eachNode(y,function(C){for(var B=0;B=2){return B(z-0.01)}}return B(0.75)},getRadius:function(){var w=this.config.radius;if(w!=="auto"){return w}var x=this.canvas.getSize();return Math.min(x.width,x.height)/2},refresh:function(w){if(w){this.reposition();this.graph.eachNode(function(x){x.startPos.rho=x.pos.rho=x.endPos.rho;x.startPos.theta=x.pos.theta=x.endPos.theta})}else{this.compute()}this.plot()},reposition:function(){this.compute("end");var w=this.graph.getNode(this.root).pos.getc().scale(-1);e.Util.moebiusTransformation(this.graph,[w],["end"],"end","ignore");this.graph.eachNode(function(x){if(x.ignore){x.endPos.rho=x.pos.rho;x.endPos.theta=x.pos.theta}})},plot:function(){this.fx.plot()},onClick:function(y,w){var x=this.graph.getNode(y).pos.getc(true);this.move(x,w)},move:function(A,y){var x=r(A.x,A.y);if(this.busy===false&&x.norm()<1){this.busy=true;var w=this.graph.getClosestNodeToPos(x),z=this;this.graph.computeLevels(w.id,0);this.controller.onBeforeCompute(w);y=c.merge({onComplete:c.empty},y||{});this.fx.animate(c.merge({modes:["moebius"],hideLabels:true},y,{onComplete:function(){z.busy=false;y.onComplete()}}),x)}}});$jit.Hypertree.$extend=true;(function(w){w.Op=new q({Implements:e.Op});w.Plot=new q({Implements:e.Plot});w.Label={};w.Label.Native=new q({Implements:e.Label.Native,initialize:function(x){this.viz=x},renderLabel:function(z,B,y){var x=z.getCtx();var C=B.pos.getc(true);var A=this.viz.getRadius();x.fillText(B.name,C.x*A,C.y*A)}});w.Label.SVG=new q({Implements:e.Label.SVG,initialize:function(x){this.viz=x},placeLabel:function(I,C,D){var G=C.pos.getc(true),z=this.viz.canvas,A=z.translateOffsetX,y=z.translateOffsetY,H=z.scaleOffsetX,F=z.scaleOffsetY,E=z.getSize(),x=this.viz.getRadius();var B={x:Math.round((G.x*H)*x+A+E.width/2),y:Math.round((G.y*F)*x+y+E.height/2)};I.setAttribute("x",B.x);I.setAttribute("y",B.y);D.onPlaceLabel(I,C)}});w.Label.HTML=new q({Implements:e.Label.HTML,initialize:function(x){this.viz=x},placeLabel:function(J,D,E){var H=D.pos.getc(true),A=this.viz.canvas,B=A.translateOffsetX,z=A.translateOffsetY,I=A.scaleOffsetX,G=A.scaleOffsetY,F=A.getSize(),x=this.viz.getRadius();var C={x:Math.round((H.x*I)*x+B+F.width/2),y:Math.round((H.y*G)*x+z+F.height/2)};var y=J.style;y.left=C.x+"px";y.top=C.y+"px";y.display=this.fitsInCanvas(C,A)?"":"none";E.onPlaceLabel(J,D)}});w.Plot.NodeTypes=new q({none:{render:c.empty,contains:c.lambda(false)},circle:{render:function(z,x){var y=this.node,B=z.getData("dim"),A=z.pos.getc();B=y.transform?B*(1-A.squaredNorm()):B;A.$scale(z.scale);if(B>0.2){this.nodeHelper.circle.render("fill",A,B,x)}},contains:function(x,A){var y=x.getData("dim"),z=x.pos.getc().$scale(x.scale);return this.nodeHelper.circle.contains(z,A,y)}},ellipse:{render:function(A,y){var B=A.pos.getc().$scale(A.scale),z=A.getData("width"),x=A.getData("height");this.nodeHelper.ellipse.render("fill",B,z,x,y)},contains:function(z,B){var y=z.getData("width"),x=z.getData("height"),A=z.pos.getc().$scale(z.scale);return this.nodeHelper.circle.contains(A,B,y,x)}},square:{render:function(z,x){var y=this.node,B=z.getData("dim"),A=z.pos.getc();B=y.transform?B*(1-A.squaredNorm()):B;A.$scale(z.scale);if(B>0.2){this.nodeHelper.square.render("fill",A,B,x)}},contains:function(x,A){var y=x.getData("dim"),z=x.pos.getc().$scale(x.scale);return this.nodeHelper.square.contains(z,A,y)}},rectangle:{render:function(B,y){var A=this.node,z=B.getData("width"),x=B.getData("height"),C=B.pos.getc();z=A.transform?z*(1-C.squaredNorm()):z;x=A.transform?x*(1-C.squaredNorm()):x;C.$scale(B.scale);if(z>0.2&&x>0.2){this.nodeHelper.rectangle.render("fill",C,z,x,y)}},contains:function(z,B){var y=z.getData("width"),x=z.getData("height"),A=z.pos.getc().$scale(z.scale);return this.nodeHelper.rectangle.contains(A,B,y,x)}},triangle:{render:function(z,x){var y=this.node,B=z.getData("dim"),A=z.pos.getc();B=y.transform?B*(1-A.squaredNorm()):B;A.$scale(z.scale);if(B>0.2){this.nodeHelper.triangle.render("fill",A,B,x)}},contains:function(x,A){var y=x.getData("dim"),z=x.pos.getc().$scale(x.scale);return this.nodeHelper.triangle.contains(z,A,y)}},star:{render:function(z,x){var y=this.node,B=z.getData("dim"),A=z.pos.getc();B=y.transform?B*(1-A.squaredNorm()):B;A.$scale(z.scale);if(B>0.2){this.nodeHelper.star.render("fill",A,B,x)}},contains:function(x,A){var y=x.getData("dim"),z=x.pos.getc().$scale(x.scale);return this.nodeHelper.star.contains(z,A,y)}}});w.Plot.EdgeTypes=new q({none:c.empty,line:{render:function(x,y){var B=x.nodeFrom.pos.getc(true),A=x.nodeTo.pos.getc(true),z=x.nodeFrom.scale;this.edgeHelper.line.render({x:B.x*z,y:B.y*z},{x:A.x*z,y:A.y*z},y)},contains:function(x,B){var A=x.nodeFrom.pos.getc(true),z=x.nodeTo.pos.getc(true),y=x.nodeFrom.scale;this.edgeHelper.line.contains({x:A.x*y,y:A.y*y},{x:z.x*y,y:z.y*y},B,this.edge.epsilon)}},arrow:{render:function(y,z){var E=y.nodeFrom.pos.getc(true),D=y.nodeTo.pos.getc(true),A=y.nodeFrom.scale,C=y.getData("dim"),B=y.data.$direction,x=(B&&B.length>1&&B[0]!=y.nodeFrom.id);this.edgeHelper.arrow.render({x:E.x*A,y:E.y*A},{x:D.x*A,y:D.y*A},C,x,z)},contains:function(x,B){var A=x.nodeFrom.pos.getc(true),z=x.nodeTo.pos.getc(true),y=x.nodeFrom.scale;this.edgeHelper.arrow.contains({x:A.x*y,y:A.y*y},{x:z.x*y,y:z.y*y},B,this.edge.epsilon)}},hyperline:{render:function(x,y){var B=x.nodeFrom.pos.getc(),A=x.nodeTo.pos.getc(),z=this.viz.getRadius();this.edgeHelper.hyperline.render(B,A,z,y)},contains:c.lambda(false)}})})($jit.Hypertree)})(); \ No newline at end of file diff --git a/OPAL/av/src/test/resources/InvalidClasspathFile.txt b/OPAL/av/src/test/resources/InvalidClasspathFile.txt deleted file mode 100644 index aed69e2ed4..0000000000 --- a/OPAL/av/src/test/resources/InvalidClasspathFile.txt +++ /dev/null @@ -1 +0,0 @@ -/Users/Testuser/.m2/repository/org/scalatest/scalatest_2.11/2.1.7/scalatest_2.11-2.1.7.jar /Users/Testuser/.m2/repository/org/scala-lang/modules/scala-parser-combinators_2.11/1.0.1/scala-parser-combinators_2.11-1.0.1.jar /Users/Testuser/.m2/repository/org/scala-lang/modules/scala-xml_2.11/1.0.1/scala-xml_2.11-1.0.1.jar /Users/Testuser/.m2/repository/org/scala-lang/scala-library/2.11.0/scala-library-2.11.0.jar /Users/Testuser/.m2/repository/org/scala-lang/scala-reflect/2.11.0/scala-reflect-2.11.0.jar \ No newline at end of file diff --git a/OPAL/av/src/test/resources/ValidClasspathFile.txt b/OPAL/av/src/test/resources/ValidClasspathFile.txt deleted file mode 100644 index d3cbaac1a5..0000000000 --- a/OPAL/av/src/test/resources/ValidClasspathFile.txt +++ /dev/null @@ -1 +0,0 @@ -/root/org/scalatest/scalatest_2.11/2.1.7/scalatest_2.11-2.1.7.jar:/root/org/scala-lang/modules/scala-parser-combinators_2.11/1.0.1/scala-parser-combinators_2.11-1.0.1.jar:/root/org/scala-lang/modules/scala-xml_2.11/1.0.1/scala-xml_2.11-1.0.1.jar:/root/org/scala-lang/scala-library/2.11.0/scala-library-2.11.0.jar:/root/org/scala-lang/scala-reflect/2.11.0/scala-reflect-2.11.0.jar \ No newline at end of file diff --git a/OPAL/av/src/test/resources/classfiles/entity.jar b/OPAL/av/src/test/resources/classfiles/entity.jar deleted file mode 100644 index 2a7f8f61ec51d8ab8ea6dc1affb65144dd401ed7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6358 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 diff --git a/OPAL/av/src/test/resources/classfiles/mathematics.jar b/OPAL/av/src/test/resources/classfiles/mathematics.jar deleted file mode 100644 index f82ca8b177d03efbf1427e7cbae00456bd491bca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5867 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 Apa1{> diff --git a/OPAL/av/src/test/resources/sourcefiles/entity/AbstractEntity.scala b/OPAL/av/src/test/resources/sourcefiles/entity/AbstractEntity.scala deleted file mode 100644 index 6787d72b31..0000000000 --- a/OPAL/av/src/test/resources/sourcefiles/entity/AbstractEntity.scala +++ /dev/null @@ -1,8 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package entity - -/** - * @author Marco Torsello - */ -@SerialVersionUID(100L) -abstract class AbstractEntity extends Serializable {} diff --git a/OPAL/av/src/test/resources/sourcefiles/entity/annotation/Column.java b/OPAL/av/src/test/resources/sourcefiles/entity/annotation/Column.java deleted file mode 100644 index 9458dbdf82..0000000000 --- a/OPAL/av/src/test/resources/sourcefiles/entity/annotation/Column.java +++ /dev/null @@ -1,21 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package entity.annotation; - -import java.lang.annotation.Retention; -import java.lang.annotation.Target; -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -/** - * @author Marco Torsello - */ -@Target({METHOD, FIELD}) -@Retention(RUNTIME) -public @interface Column { - - String name() default ""; - - boolean nullable() default true; - -} diff --git a/OPAL/av/src/test/resources/sourcefiles/entity/annotation/Entity.java b/OPAL/av/src/test/resources/sourcefiles/entity/annotation/Entity.java deleted file mode 100644 index 75a360a40a..0000000000 --- a/OPAL/av/src/test/resources/sourcefiles/entity/annotation/Entity.java +++ /dev/null @@ -1,17 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package entity.annotation; - -import java.lang.annotation.Retention; -import java.lang.annotation.Target; -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -/** - * @author Marco Torsello - */ -@Target({METHOD, FIELD}) -@Retention(RUNTIME) -public @interface Entity { - -} diff --git a/OPAL/av/src/test/resources/sourcefiles/entity/annotation/Id.java b/OPAL/av/src/test/resources/sourcefiles/entity/annotation/Id.java deleted file mode 100644 index 49c003e5cf..0000000000 --- a/OPAL/av/src/test/resources/sourcefiles/entity/annotation/Id.java +++ /dev/null @@ -1,19 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package entity.annotation; - -import java.lang.annotation.Retention; -import java.lang.annotation.Target; -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -/** - * @author Marco Torsello - */ -@Target({METHOD, FIELD}) -@Retention(RUNTIME) -public @interface Id { - - String name() default ""; - -} diff --git a/OPAL/av/src/test/resources/sourcefiles/entity/annotation/Table.java b/OPAL/av/src/test/resources/sourcefiles/entity/annotation/Table.java deleted file mode 100644 index d7964ef9d6..0000000000 --- a/OPAL/av/src/test/resources/sourcefiles/entity/annotation/Table.java +++ /dev/null @@ -1,19 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package entity.annotation; - -import java.lang.annotation.Retention; -import java.lang.annotation.Target; -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -/** - * @author Marco Torsello - */ -@Target({METHOD, FIELD}) -@Retention(RUNTIME) -public @interface Table { - - String name() default ""; - -} diff --git a/OPAL/av/src/test/resources/sourcefiles/entity/annotation/Transient.java b/OPAL/av/src/test/resources/sourcefiles/entity/annotation/Transient.java deleted file mode 100644 index 2a5c247082..0000000000 --- a/OPAL/av/src/test/resources/sourcefiles/entity/annotation/Transient.java +++ /dev/null @@ -1,17 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package entity.annotation; - -import java.lang.annotation.Retention; -import java.lang.annotation.Target; -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -/** - * @author Marco Torsello - */ -@Target({METHOD, FIELD}) -@Retention(RUNTIME) -public @interface Transient { - -} diff --git a/OPAL/av/src/test/resources/sourcefiles/mathematics/Example.scala b/OPAL/av/src/test/resources/sourcefiles/mathematics/Example.scala deleted file mode 100644 index 0adb2bb614..0000000000 --- a/OPAL/av/src/test/resources/sourcefiles/mathematics/Example.scala +++ /dev/null @@ -1,10 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package mathematics - -/** - * @author Samuel Beracasa - */ -class Example { - val math = new Mathematics() - math.operation1 -} diff --git a/OPAL/av/src/test/resources/sourcefiles/mathematics/Mathematics.scala b/OPAL/av/src/test/resources/sourcefiles/mathematics/Mathematics.scala deleted file mode 100644 index 4c6ebbdf2a..0000000000 --- a/OPAL/av/src/test/resources/sourcefiles/mathematics/Mathematics.scala +++ /dev/null @@ -1,18 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package mathematics - -/** - * @author Samuel Beracasa - */ -class Mathematics { - val num1 = new Number(1) - val num2 = new Number(2) - val num4 = new Number(4) - val num8 = new Number(8) - - val rat1 = new Rational(num1, num2) - val rat2 = new Rational(num4, num1) - val rat3 = new Rational(num1, num8) - - def operation1() = { println(num1 + num4 * rat2 - num2 / rat3 * num8) } -} diff --git a/OPAL/av/src/test/resources/sourcefiles/mathematics/Number.scala b/OPAL/av/src/test/resources/sourcefiles/mathematics/Number.scala deleted file mode 100644 index cb7b74698b..0000000000 --- a/OPAL/av/src/test/resources/sourcefiles/mathematics/Number.scala +++ /dev/null @@ -1,26 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package mathematics - -/** - * @author Samuel Beracasa - */ -class Number(var value: Int) extends Operations { - // Number operator Number - def +(other: Number): Number = new Number(this.value + other.value) - def -(other: Number): Number = new Number(this.value - other.value) - def *(other: Number): Number = new Number(this.value * other.value) - def /(other: Number): Number = new Number(this.value / other.value) - - // Number operator Rational - def +(other: Rational): Rational = - new Rational(((this / other.denom) + other.numer), other.denom) - def -(other: Rational): Rational = - new Rational((this / other.denom) - other.numer, other.denom) - def *(other: Rational): Rational = - new Rational(this * other.numer, other.denom) - def /(other: Rational): Rational = - new Rational(other.numer, other.denom / this) - - // Print - override def toString() = "" + this.value -} diff --git a/OPAL/av/src/test/resources/sourcefiles/mathematics/Operations.scala b/OPAL/av/src/test/resources/sourcefiles/mathematics/Operations.scala deleted file mode 100644 index 80ad5d0fe5..0000000000 --- a/OPAL/av/src/test/resources/sourcefiles/mathematics/Operations.scala +++ /dev/null @@ -1,18 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package mathematics - -/** - * @author Samuel Beracasa - */ -trait Operations { - def +(other: Number): Any - def -(other: Number): Any - def *(other: Number): Any - def /(other: Number): Any - def +(other: Rational): Rational - def -(other: Rational): Rational - def *(other: Rational): Rational - def /(other: Rational): Rational - - def toString(): String -} diff --git a/OPAL/av/src/test/resources/sourcefiles/mathematics/Rational.scala b/OPAL/av/src/test/resources/sourcefiles/mathematics/Rational.scala deleted file mode 100644 index 947053574e..0000000000 --- a/OPAL/av/src/test/resources/sourcefiles/mathematics/Rational.scala +++ /dev/null @@ -1,31 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package mathematics - -/** - * @author Samuel Beracasa - */ -class Rational(val numer: Number, val denom: Number) extends Operations { - - // Rational operator Number = Rational - def +(other: Number) = - new Rational(((other / this.denom) + this.numer), this.denom) - def -(other: Number) = - new Rational((other / this.denom) - this.numer, this.denom) - def *(other: Number) = - new Rational(other * this.numer, this.denom) - def /(other: Number) = - new Rational(this.numer, this.denom / other) - - // Rational operator Rational = Rational - def +(other: Rational) = - new Rational((this.numer / other.denom) + (other.numer / this.denom), other.denom * this.denom) - def -(other: Rational) = - new Rational((this.numer / other.denom) - (other.numer / this.denom), other.denom * this.denom) - def *(other: Rational) = - new Rational((this.numer * other.numer), (other.denom / this.denom)) - def /(other: Rational) = - new Rational((this.numer * other.denom), (other.numer * this.denom)) - - // Print - override def toString() = numer.toString + "/" + denom.toString -} diff --git a/OPAL/av/src/test/scala/org/opalj/av/checking/ArchitectureConsistencyTest.scala b/OPAL/av/src/test/scala/org/opalj/av/checking/ArchitectureConsistencyTest.scala deleted file mode 100644 index 3ce84fa3a7..0000000000 --- a/OPAL/av/src/test/scala/org/opalj/av/checking/ArchitectureConsistencyTest.scala +++ /dev/null @@ -1,344 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj -package av -package checking - -import org.junit.runner.RunWith -import org.scalatest.BeforeAndAfterAll -import org.scalatest.flatspec.AnyFlatSpec -import org.scalatest.matchers.should.Matchers -import org.scalatestplus.junit.JUnitRunner - -import org.opalj.bi.TestResources.locateTestResources -import org.opalj.br.BooleanValue -import org.opalj.br.StringValue -import org.opalj.br.reader.Java8Framework.ClassFiles - -/** - * Tests for architectural Specifications. - * - * The architecture is defined w.r.t. the "Mathematics test classes". - * - * @author Samuel Beracasa - * @author Marco Torsello - */ -@RunWith(classOf[JUnitRunner]) -class ArchitectureConsistencyTest extends AnyFlatSpec with Matchers with BeforeAndAfterAll { - - val project = ClassFiles(locateTestResources("classfiles/mathematics.jar", "av")) - - def testEnsemblesAreNonEmpty(specification: Specification): Unit = { - specification.ensembles.foreach { e => - val (ensembleID, (matcher, extent)) = e - if (ensembleID != Symbol("Empty") && extent.isEmpty) - fail(s"$ensembleID didn't match any elements ($matcher)") - } - } - - behavior of "the Architecture Validation Framework when checking architectural dependencies" - - /* - * outgoing is_only_allowed_to constraint validations - */ - it should "correctly validate a valid specification using is_only_allowed_to_use constraints" in { - val specification = new Specification(project) { - ensemble(Symbol("Operations")) { "mathematics.Operations*" } - ensemble(Symbol("Number")) { "mathematics.Number*" } - ensemble(Symbol("Rational")) { "mathematics.Rational*" } - ensemble(Symbol("Mathematics")) { "mathematics.Mathematics*" } - ensemble(Symbol("Example")) { "mathematics.Example*" } - - Symbol("Example").is_only_allowed_to(USE, Symbol("Mathematics")) - } - - val result = specification.analyze().map(_.toString).toSeq.sorted.mkString("\n") - result should be(empty) // <= primary test - - testEnsemblesAreNonEmpty(specification) - } - - it should ("correctly identify deviations between the specified (using is_only_allowed_to_use constraints) and implemented architecture") in { - val specification = new Specification(project) { - ensemble(Symbol("Operations")) { "mathematics.Operations*" } - ensemble(Symbol("Number")) { "mathematics.Number*" } - ensemble(Symbol("Rational")) { "mathematics.Rational*" } - ensemble(Symbol("Mathematics")) { "mathematics.Mathematics*" } - ensemble(Symbol("Example")) { "mathematics.Example*" } - - Symbol("Mathematics").is_only_allowed_to(USE, Symbol("Rational")) - } - specification.analyze() should not be (empty) // <= primary test - - testEnsemblesAreNonEmpty(specification) - } - - /* - * outgoing is_not_allowed_to constraint validation - */ - it should ("validate the is_not_allowed_to_use constraint with no violations") in { - val specification = new Specification(project) { - ensemble(Symbol("Operations")) { "mathematics.Operations*" } - ensemble(Symbol("Number")) { "mathematics.Number*" } - ensemble(Symbol("Rational")) { "mathematics.Rational*" } - ensemble(Symbol("Mathematics")) { "mathematics.Mathematics*" } - ensemble(Symbol("Example")) { "mathematics.Example*" } - - Symbol("Example").is_not_allowed_to(USE, Symbol("Rational")) - } - val result = specification.analyze().map(_.toString).toSeq.sorted.mkString("\n") - result should be(empty) - - testEnsemblesAreNonEmpty(specification) - } - - it should ("validate the is_not_allowed_to_use constraint with violations") in { - val specification = new Specification(project) { - ensemble(Symbol("Operations")) { "mathematics.Operations*" } - ensemble(Symbol("Number")) { "mathematics.Number*" } - ensemble(Symbol("Rational")) { "mathematics.Rational*" } - ensemble(Symbol("Mathematics")) { "mathematics.Mathematics*" } - ensemble(Symbol("Example")) { "mathematics.Example*" } - - Symbol("Mathematics").is_not_allowed_to(USE, Symbol("Number")) - } - specification.analyze() should not be (empty) - - testEnsemblesAreNonEmpty(specification) - } - - /* - * incoming is_only_to_be_used_by constraint validation - */ - it should ("validate the is_only_to_be_used_by constraint with no violations") in { - val specification = new Specification(project) { - ensemble(Symbol("Operations")) { "mathematics.Operations*" } - ensemble(Symbol("Number")) { "mathematics.Number*" } - ensemble(Symbol("Rational")) { "mathematics.Rational*" } - ensemble(Symbol("Mathematics")) { "mathematics.Mathematics*" } - ensemble(Symbol("Example")) { "mathematics.Example*" } - - Symbol("Mathematics").is_only_to_be_used_by(Symbol("Example")) - } - val result = specification.analyze().map(_.toString).toSeq.sorted.mkString("\n") - result should be(empty) - - testEnsemblesAreNonEmpty(specification) - } - - it should ("validate the is_only_to_be_used_by constraint with violations") in { - val specification = new Specification(project) { - ensemble(Symbol("Operations")) { "mathematics.Operations*" } - ensemble(Symbol("Number")) { "mathematics.Number*" } - ensemble(Symbol("Rational")) { "mathematics.Rational*" } - ensemble(Symbol("Mathematics")) { "mathematics.Mathematics*" } - ensemble(Symbol("Example")) { "mathematics.Example*" } - - Symbol("Rational").is_only_to_be_used_by(Symbol("Mathematics")) - } - specification.analyze() should not be (empty) - - testEnsemblesAreNonEmpty(specification) - } - - /* - * incoming allows_incoming_dependencies_from constraint validation - */ - it should ("validate the allows_incoming_dependencies_from constraint with no violations") in { - val specification = new Specification(project) { - ensemble(Symbol("Operations")) { "mathematics.Operations*" } - ensemble(Symbol("Number")) { "mathematics.Number*" } - ensemble(Symbol("Rational")) { "mathematics.Rational*" } - ensemble(Symbol("Mathematics")) { "mathematics.Mathematics*" } - ensemble(Symbol("Example")) { "mathematics.Example*" } - - Symbol("Mathematics").allows_incoming_dependencies_from(Symbol("Example")) - } - val result = specification.analyze().map(_.toString).toSeq.sorted.mkString("\n") - result should be(empty) - - testEnsemblesAreNonEmpty(specification) - } - - it should ("validate the allows_incoming_dependencies_from constraint with violations") in { - val specification = new Specification(project) { - ensemble(Symbol("Operations")) { "mathematics.Operations*" } - ensemble(Symbol("Number")) { "mathematics.Number*" } - ensemble(Symbol("Rational")) { "mathematics.Rational*" } - ensemble(Symbol("Mathematics")) { "mathematics.Mathematics*" } - ensemble(Symbol("Example")) { "mathematics.Example*" } - - Symbol("Number").allows_incoming_dependencies_from(Symbol("Rational")) - } - specification.analyze() should not be (empty) - - testEnsemblesAreNonEmpty(specification) - } - - /* - * outgoing every_element_should_implement_method constraint - */ - it should ("validate the every_element_should_implement_method constraint with no violations") in { - val specification = new Specification(project) { - ensemble(Symbol("Mathematics"))( - ClassMatcher("mathematics.Mathematics", matchPrefix = false, matchMethods = false, matchFields = false) - ) - - Symbol("Mathematics").every_element_should_implement_method(MethodWithName("operation1")) - - } - specification.analyze() should be(empty) - - testEnsemblesAreNonEmpty(specification) - } - - it should ("validate the every_element_should_implement_method constraint with violations") in { - val specification = new Specification(project) { - ensemble(Symbol("Operations"))( - ClassMatcher("mathematics.Operations", matchPrefix = false, matchMethods = false, matchFields = false) - ) - - Symbol("Operations").every_element_should_implement_method(MethodWithName("operation1")) - } - specification.analyze() should not be (empty) - - testEnsemblesAreNonEmpty(specification) - } - - /* - * outgoing every_element_should_extend constraint - */ - it should ("validate the every_element_should_extend constraint with no violations") in { - val project = ClassFiles(locateTestResources("classfiles/entity.jar", "av")) - val specification = new Specification(project) { - ensemble(Symbol("Address"))( - ClassMatcher("entity.impl.Address", matchPrefix = false, matchMethods = false, matchFields = false) - ) - - ensemble(Symbol("User"))( - ClassMatcher("entity.impl.User", matchPrefix = false, matchMethods = false, matchFields = false) - ) - - ensemble(Symbol("AbstractEntity"))( - ClassMatcher("entity.AbstractEntity", matchPrefix = false, matchMethods = false, matchFields = false) - ) - - Symbol("Address").every_element_should_extend(Symbol("AbstractEntity")) - - } - - specification.analyze() should be(empty) - - testEnsemblesAreNonEmpty(specification) - } - - it should ("validate the every_element_should_extend constraint with violations") in { - val project = ClassFiles(locateTestResources("classfiles/entity.jar", "av")) - val specification = new Specification(project) { - ensemble(Symbol("Address"))( - ClassMatcher("entity.impl.Address", matchPrefix = false, matchMethods = false, matchFields = false) - ) - - ensemble(Symbol("User"))( - ClassMatcher("entity.impl.User", matchPrefix = false, matchMethods = false, matchFields = false) - ) - - ensemble(Symbol("AbstractEntity"))( - ClassMatcher("entity.AbstractEntity", matchPrefix = false, matchMethods = false, matchFields = false) - ) - - Symbol("Address").every_element_should_extend(Symbol("User")) - - } - - specification.analyze() should not be (empty) - - testEnsemblesAreNonEmpty(specification) - } - - /* - * outgoing every_element_should_be_annotated_with constraint - */ - it should ("validate every_element_should_be_annotated_with constraint with no violations") in { - val project = ClassFiles(locateTestResources("classfiles/entity.jar", "av")) - val specification = new Specification(project) { - - ensemble(Symbol("EntityId"))(FieldMatcher(AllClasses, theName = Some("id"))) - - Symbol("EntityId").every_element_should_be_annotated_with(AnnotatedWith("entity.annotation.Id")) - } - - specification.analyze() should be(empty) - - testEnsemblesAreNonEmpty(specification) - - } - - it should ("validate every_element_should_be_annotated_with constraint with violations") in { - val project = ClassFiles(locateTestResources("classfiles/entity.jar", "av")) - val specification = new Specification(project) { - - ensemble(Symbol("EntityId"))(FieldMatcher(AllClasses, theName = Some("id"))) - - Symbol("EntityId").every_element_should_be_annotated_with(AnnotatedWith("entity.annotation.Entity")) - } - - specification.analyze() should not be (empty) - - testEnsemblesAreNonEmpty(specification) - - } - - /* - * outgoing every_element_should_be_annotated_with (multiple annotations) constraint - */ - it should ("validate every_element_should_be_annotated_with (multiple annotations) constraint with no violations") in { - val project = ClassFiles(locateTestResources("classfiles/entity.jar", "av")) - val specification = new Specification(project) { - - ensemble(Symbol("EntityId"))(FieldMatcher(AllClasses, theName = Some("id"))) - - Symbol("EntityId").every_element_should_be_annotated_with( - "(entity.annotation.Id - entity.annotation.Column)", - Seq( - AnnotatedWith("entity.annotation.Id"), - AnnotatedWith( - "entity.annotation.Column", - "name" -> StringValue("id"), - "nullable" -> BooleanValue(false) - ) - ) - ) - } - - specification.analyze() should be(empty) - - testEnsemblesAreNonEmpty(specification) - - } - - it should ("validate every_element_should_be_annotated_with (multiple annotations) constraint with violations") in { - val project = ClassFiles(locateTestResources("classfiles/entity.jar", "av")) - val specification = new Specification(project) { - - ensemble(Symbol("EntityId"))(FieldMatcher(AllClasses, theName = Some("id"))) - - Symbol("EntityId").every_element_should_be_annotated_with( - "(entity.annotation.Id - entity.annotation.Column)", - Seq( - AnnotatedWith("entity.annotation.Id"), - AnnotatedWith( - "entity.annotation.Column", - "name" -> StringValue("id"), - "nullable" -> BooleanValue(true) - ) - ) - ) - } - - specification.analyze() should not be (empty) - - testEnsemblesAreNonEmpty(specification) - - } - -} diff --git a/OPAL/av/src/test/scala/org/opalj/av/checking/ClasspathFileTest.scala b/OPAL/av/src/test/scala/org/opalj/av/checking/ClasspathFileTest.scala deleted file mode 100644 index a573fea435..0000000000 --- a/OPAL/av/src/test/scala/org/opalj/av/checking/ClasspathFileTest.scala +++ /dev/null @@ -1,86 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj -package av -package checking - -import scala.util.matching.Regex - -import org.junit.runner.RunWith -import org.scalatest.BeforeAndAfterAll -import org.scalatest.flatspec.AnyFlatSpec -import org.scalatest.matchers.should.Matchers -import org.scalatestplus.junit.JUnitRunner - -import org.opalj.av.checking.Specification.* - -/** - * Systematic tests created to check the behavior of the Specification package. - * - * Tests all methods to handle generated classpath files. - * - * @author Marco Torsello - */ -@RunWith(classOf[JUnitRunner]) -class ClasspathFileTest extends AnyFlatSpec with Matchers with BeforeAndAfterAll { - - behavior of "the Architecture Validation Library when processing classpath files" - - val validClassPath = Classpath("OPAL/av/src/test/resources/ValidClasspathFile.txt", ':') - val invalidClassPath = Classpath("OPAL/av/src/test/resources/InvalidClasspathFile.txt") - - it should "return the expected list of paths that match the given regular expression" in { - val scalatestJAR = PathToJARs(validClassPath, """.*(scalatest_2.11-2.1.7.jar)""".r) - val expectedListOfPaths1 = List[String]( - "/root/org/scalatest/scalatest_2.11/2.1.7/scalatest_2.11-2.1.7.jar" - ) - scalatestJAR.toList should equal(expectedListOfPaths1) - - val scalaLibraryJAR = PathToJARs(validClassPath, """.*(scala-library-2.11.0.jar)""".r) - val expectedListOfPaths2 = List[String]( - "/root/org/scala-lang/scala-library/2.11.0/scala-library-2.11.0.jar" - ) - scalaLibraryJAR.toList should equal(expectedListOfPaths2) - } - - it should "throw a specification error if path couldn't be found" in { - intercept[SpecificationError] { PathToJARs(validClassPath, """.*(scalatest.jar)""".r) } - intercept[SpecificationError] { PathToJARs(invalidClassPath, """.*(scalatest_2.11-2.1.7.jar)""".r) } - } - - it should "return the expected list of paths that match the given list of regular expressions" in { - val listOfJARs = List[Regex]( - """.*(scalatest_2.11-.*.jar)""".r, - """.*(scala-library-.*.jar)""".r, - """.*(scala-xml_2.11-.*.jar)""".r - ) - val listOfPaths: Iterable[String] = PathToJARs(validClassPath, listOfJARs) - - val expectedListOfPaths = List[String]( - "/root/org/scalatest/scalatest_2.11/2.1.7/scalatest_2.11-2.1.7.jar", - "/root/org/scala-lang/scala-library/2.11.0/scala-library-2.11.0.jar", - "/root/org/scala-lang/modules/scala-xml_2.11/1.0.1/scala-xml_2.11-1.0.1.jar" - ) - - listOfPaths.toList should equal(expectedListOfPaths) - } - - it should "throw a specification error if the path to one of the given JARs couldn't be found" in { - intercept[SpecificationError] { - val listOfJARs = List[Regex]( - """.*(scalatest_2.11-.*.jar)""".r, - """.*(scala-library-.*.jar)""".r, - """.*(scala.jar)""".r - ) - PathToJARs(validClassPath, listOfJARs) - } - - intercept[SpecificationError] { - val listOfJARs = List[Regex]( - """.*(scalatest_2.11-3.*.jar)""".r, - """.*(scala-library-.*.jar)""".r, - """.*(scala-xml_2.11-.*.jar)""".r - ) - PathToJARs(invalidClassPath, listOfJARs) - } - } -} diff --git a/OPAL/av/src/test/scala/org/opalj/av/checking/MatcherTest.scala b/OPAL/av/src/test/scala/org/opalj/av/checking/MatcherTest.scala deleted file mode 100644 index eee3d8c2f4..0000000000 --- a/OPAL/av/src/test/scala/org/opalj/av/checking/MatcherTest.scala +++ /dev/null @@ -1,548 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj -package av -package checking - -import java.net.URL -import scala.collection.IndexedSeq - -import org.junit.runner.RunWith -import org.scalatest.BeforeAndAfterAll -import org.scalatest.funsuite.AnyFunSuite -import org.scalatest.matchers.should.Matchers -import org.scalatestplus.junit.JUnitRunner - -import org.opalj.bi.AccessFlagsMatcher.* -import org.opalj.bi.TestResources.locateTestResources -import org.opalj.br.Annotation -import org.opalj.br.BooleanValue -import org.opalj.br.ClassType -import org.opalj.br.ElementValuePair -import org.opalj.br.ElementValuePairs -import org.opalj.br.MethodDescriptor -import org.opalj.br.NoElementValuePairs -import org.opalj.br.StringValue -import org.opalj.br.analyses.Project -import org.opalj.br.reader.Java8Framework.ClassFiles - -/** - * Tests matchers of the Architecture Validation Framework. - * - * @author Marco Torsello - * @author Michael Eichberg - */ -@RunWith(classOf[JUnitRunner]) -class MatcherTest extends AnyFunSuite with Matchers with BeforeAndAfterAll { - - implicit val project: Project[URL] = Project(ClassFiles(locateTestResources("classfiles/entity.jar", "av"))) - - /* - * SimpleNamePredicate - */ - test("the SimpleNamePredicate should match the given name") { - - Equals("entity/impl/User")("entity/impl/User") should be(true) - - StartsWith("entity")("entity/impl/User") should be(true) - - Equals("entity/impl/User")("entity/impl/User") should be(true) - } - - test("the SimpleNamePredicate should not match the given name") { - - Equals("entity/impl/Contact")("entity/impl/User") should be(false) - - StartsWith("entity/impl/C")("entity/impl/User") should be(false) - - Equals("impl/Contact")("entity/impl/Contact") should be(false) - } - - /* - * MethodPredicate - */ - test("the simple MethodPredicates") { - MethodMatcher( - ClassMatcher("entity.impl.User"), - MethodWithName("lastName") - ).extension.size should be(1) - - MethodMatcher( - ClassMatcher("entity.impl.User"), - MethodWithSignature("lastName", MethodDescriptor.JustReturnsString) - ).extension.size should be(1) - - MethodMatcher( - ClassMatcher("entity.impl.User"), - MethodWithSignature("lastName", MethodDescriptor.JustReturnsBoolean) - ).extension.size should be(0) - } - - test("the combination of simple (Method)Predicates") { - MethodMatcher( - ClassMatcher("entity.impl.User"), - MethodWithName("lastName") and AccessFlags(PUBLIC) - ).extension.size should be(1) - - MethodMatcher( - ClassMatcher("entity.impl.User"), - MethodWithSignature("lastName", MethodDescriptor.JustReturnsString) and AccessFlags(PUBLIC) - ).extension.size should be(1) - - MethodMatcher( - ClassMatcher("entity.impl.User"), - AnyMethod.having(AccessFlags(STATIC)) - ).extension.size should be(0) - } - - /* - * RegexNamePredicate - */ - test("the RegexNameMatcher should match the given name") { - RegexNamePredicate(""".+User""".r)("entity/impl/User") should be(true) - } - - test("the RegexNamePredicate should not match the given name") { - RegexNamePredicate(""".+Contact""".r)("entity/impl/User") should be(false) - } - - /* - * AnnotatedWith - */ - test("that AnnotatedWith perform a precise match of the given annotation") { - AnnotatedWith("entity.annotation.Transient")( - Annotation(ClassType("entity/annotation/Transient")) - ) should be(true) - - AnnotatedWith("entity.annotation.Column", "name" -> StringValue("first_name"))( - Annotation( - ClassType("entity/annotation/Column"), - ElementValuePairs(ElementValuePair("name", StringValue("first_name"))) - ) - ) should be(true) - } - - test("the AnnotatedWith should not match the given annotation") { - AnnotatedWith("entity.annotation.Column")( - Annotation(ClassType("entity/annotation/Transient")) - ) should be(false) - - val fixture = - Annotation( - ClassType("entity/annotation/Transient"), - ElementValuePair("name", StringValue("last_name")) - ) - AnnotatedWith( - "entity.annotation.Column", - Map("name" -> StringValue("first_name")) - )(fixture) should be(false) - } - - /* - * AnnotationsPredicate - */ - test("the AnnotationsPredicate should match the given annotations") { - - HasAtLeastTheAnnotations(AnnotatedWith("entity.annotation.Transient"))( - IndexedSeq(Annotation(ClassType("entity/annotation/Transient"), NoElementValuePairs)) - ) should be(true) - - val columnAnnotation = IndexedSeq( - Annotation( - ClassType("entity/annotation/Column"), - ElementValuePair("name", StringValue("first_name")) - ) - ) - HasAtLeastTheAnnotations( - AnnotatedWith("entity.annotation.Column", "name" -> StringValue("first_name")) - )(columnAnnotation) should be(true) - - HasAtLeastTheAnnotations(AnnotatedWith("entity.annotation.Transient"))( - IndexedSeq(Annotation(ClassType("entity/annotation/Transient"), NoElementValuePairs)) - ) should be(true) - - HasAtLeastTheAnnotations(AnnotatedWith("entity.annotation.Column", "name" -> StringValue("first_name")))( - IndexedSeq(Annotation( - ClassType("entity/annotation/Column"), - ElementValuePairs(ElementValuePair("name", StringValue("first_name"))) - )) - ) should be(true) - - HasAtLeastTheAnnotations(AnnotatedWith("entity.annotation.Column"))( - IndexedSeq( - Annotation(ClassType("entity/annotation/Transient"), NoElementValuePairs), - Annotation(ClassType("entity/annotation/Column"), NoElementValuePairs) - ) - ) should be(true) - - HasAtLeastTheAnnotations(Set( - AnnotatedWith("entity.annotation.Column"), - AnnotatedWith("entity.annotation.Transient") - ))( - IndexedSeq( - Annotation(ClassType("entity/annotation/Transient"), NoElementValuePairs), - Annotation(ClassType("entity/annotation/Column"), NoElementValuePairs) - ) - ) should be(true) - - HasAtLeastOneAnnotation(Set( - AnnotatedWith("entity.annotation.Column"), - AnnotatedWith("entity.annotation.Transient") - ))( - IndexedSeq(Annotation(ClassType("entity/annotation/Transient"), NoElementValuePairs)) - ) should be(true) - } - - test("the AnnotationsPredicate should not match the given annotations") { - HasAtLeastTheAnnotations(AnnotatedWith("entity.annotation.Column"))( - IndexedSeq(Annotation(ClassType("entity/annotation/Transient"), NoElementValuePairs)) - ) should be(false) - - HasAtLeastTheAnnotations( - AnnotatedWith("entity.annotation.Column", Map("name" -> StringValue("first_name"))) - )( - IndexedSeq( - Annotation( - ClassType("entity/annotation/Transient"), - ElementValuePairs(ElementValuePair("name", StringValue("last_name"))) - ) - ) - ) should be(false) - - HasTheAnnotations(AnnotatedWith("entity.annotation.Column"))( - IndexedSeq( - Annotation(ClassType("entity/annotation/Transient"), NoElementValuePairs), - Annotation(ClassType("entity/annotation/Column"), NoElementValuePairs) - ) - ) should be(false) - - HasAtLeastTheAnnotations(Set( - AnnotatedWith("entity.annotation.Column"), - AnnotatedWith("entity.annotation.Transient") - ))( - IndexedSeq(Annotation(ClassType("entity/annotation/Transient"), NoElementValuePairs)) - ) should be(false) - - HasTheAnnotations(Set( - AnnotatedWith("entity.annotation.Column"), - AnnotatedWith("entity.annotation.Transient") - ))( - IndexedSeq(Annotation(ClassType("entity/annotation/Transient"), NoElementValuePairs)) - ) should be(false) - - HasAtLeastOneAnnotation(Set( - AnnotatedWith("entity.annotation.Column"), - AnnotatedWith("entity.annotation.Transient") - ))( - IndexedSeq(Annotation(ClassType("entity/annotation/Embedded"), NoElementValuePairs)) - ) should be(false) - } - - /* - * ClassMatcher matching classes only - */ - test("the ClassMatcher should match only classes") { - DefaultClassMatcher( - namePredicate = Equals("entity.impl.User"), - matchMethods = false, - matchFields = false - ).extension.size should be(1) - - DefaultClassMatcher( - namePredicate = Equals("entity/impl/User"), - matchMethods = false, - matchFields = false - ).extension.size should be(1) - - DefaultClassMatcher( - namePredicate = StartsWith("entity"), - matchMethods = false, - matchFields = false - ).extension.size should be(8) - - DefaultClassMatcher( - namePredicate = RegexNamePredicate(""".+User""".r), - matchMethods = false, - matchFields = false - ).extension.size should be(1) - } - - test("the ClassMatcher should not match any class") { - ClassMatcher("entity.impl.Contact").extension should be(empty) - - ClassMatcher(Equals("entity/impl/Contact")).extension should be(empty) - - ClassMatcher(StartsWith("entity/impl/C")).extension should be(empty) - - ClassMatcher(RegexNamePredicate(""".+Contact""".r)).extension should be(empty) - } - - /* - * ClassMatcher with AccessFlags matching classes only - */ - test("the ClassMatcher should match only classes with the given access flags") { - - DefaultClassMatcher( - NOT_ABSTRACT, - matchMethods = false, - matchFields = false - ).extension.size should be(2) - - DefaultClassMatcher( - PUBLIC_ABSTRACT, - matchMethods = false, - matchFields = false - ).extension.size should be(6) - - DefaultClassMatcher( - PUBLIC, - matchMethods = false, - matchFields = false - ).extension.size should be(8) - - DefaultClassMatcher( - ANY, - matchMethods = false, - matchFields = false - ).extension.size should be(8) - - DefaultClassMatcher( - PUBLIC && NOT_ABSTRACT, - matchMethods = false, - matchFields = false - ).extension.size should be(2) - } - - test("the ClassMatcher should not match any class with the given access flags") { - DefaultClassMatcher( - PRIVATE_FINAL, - matchMethods = false, - matchFields = false - ).extension should be(empty) - - DefaultClassMatcher( - PUBLIC_STATIC_FINAL, - matchMethods = false, - matchFields = false - ).extension should be(empty) - - DefaultClassMatcher( - PUBLIC_STATIC, - matchMethods = false, - matchFields = false - ).extension should be(empty) - } - - /* - * ClassMatcher with Annotation matching classes only - */ - test("the ClassMatcher should match only classes with the given annotation") { - - DefaultClassMatcher( - annotationsPredicate = HasAtLeastTheAnnotations(AnnotatedWith("entity.annotation.Entity")), - matchMethods = false, - matchFields = false - ).extension.size should be(2) - } - - test("the ClassMatcher should not match any class with the given annotation") { - DefaultClassMatcher( - annotationsPredicate = HasAtLeastTheAnnotations(AnnotatedWith("entity.annotation.Transient")), - matchMethods = false, - matchFields = false - ).extension should be(empty) - } - - /* - * ClassMatcher matching complete classes - */ - test("the ClassMatcher should match any element of the class") { - ClassMatcher("entity.impl.User").extension.size should be(19) - - ClassMatcher(Equals("entity/impl/User")).extension.size should be(19) - - ClassMatcher(StartsWith("entity")).extension.size should be(46) - - ClassMatcher(RegexNamePredicate(""".+User""".r)).extension.size should be(19) - } - - test("the ClassMatcher should not match any element") { - ClassMatcher("entity.impl.Contact").extension should be(empty) - - ClassMatcher(Equals("entity/impl/Contact")).extension should be(empty) - - ClassMatcher(StartsWith("entity/impl/C")).extension should be(empty) - - ClassMatcher(RegexNamePredicate(""".+Contact""".r)).extension should be(empty) - } - - /* - * ClassMatcher with Annotation matching complete classes - */ - test("the ClassMatcher should match any element of the classes annotated with the given annotation") { - - ClassMatcher( - HasAtLeastTheAnnotations(AnnotatedWith("entity.annotation.Entity")) - ).extension.size should be(34) - } - - test("the ClassMatcher should not match any element with the given annotation") { - - ClassMatcher( - HasAtLeastTheAnnotations(AnnotatedWith("entity.annotation.Transient")) - ).extension should be(empty) - } - - /* - * PackageMatcher matching classes only - */ - test("the PackageMatcher should match only classes") { - val classMatcher = DefaultClassMatcher(matchMethods = false, matchFields = false) - - PackageMatcher("entity", classMatcher).extension.size should be(1) - - PackageMatcher("entity", classMatcher, true).extension.size should be(8) - - PackageMatcher(Equals("entity"), classMatcher).extension.size should be(1) - - PackageMatcher( - RegexNamePredicate(""".+impl""".r), - classMatcher - ).extension.size should be(2) - } - - test("the PackageMatcher should not match any class") { - val classMatcher = DefaultClassMatcher(matchMethods = false, matchFields = false) - - PackageMatcher("entity.user", classMatcher).extension should be(empty) - - PackageMatcher(Equals("entity/user"), classMatcher).extension should be(empty) - - PackageMatcher(StartsWith("entity/u"), classMatcher).extension should be(empty) - - PackageMatcher( - RegexNamePredicate(""".+user""".r), - classMatcher - ).extension should be(empty) - } - - /* - * PackageMatcher matching complete classes - */ - test("the PackageMatcher should match all elements of the class") { - PackageMatcher("entity").extension.size should be(3) - - PackageMatcher("entity", true).extension.size should be(46) - - PackageMatcher(Equals("entity")).extension.size should be(3) - - PackageMatcher( - RegexNamePredicate(""".+impl""".r) - ).extension.size should be(34) - } - - test("the PackageMatcher should not match any element") { - PackageMatcher("entity.user").extension should be(empty) - - PackageMatcher(Equals("entity/user")).extension should be(empty) - - PackageMatcher(StartsWith("entity/u")).extension should be(empty) - - PackageMatcher( - RegexNamePredicate(""".+user""".r) - ).extension should be(empty) - } - - /* - * FieldMatcher - */ - test("the FieldMatcher should match fields of the class") { - FieldMatcher(ClassMatcher("entity.impl.User"))(project).size should be(6) - - FieldMatcher( - ClassMatcher("entity.impl.User"), - HasAtLeastTheAnnotations( - AnnotatedWith( - "entity.annotation.Column", - Map("name" -> StringValue("first_name"), "nullable" -> BooleanValue(false)) - ) - ) - ).extension.size should be(1) - - FieldMatcher( - ClassMatcher("entity.impl.User"), - theType = Some("Ljava.lang.String;") - ).extension.size should be(3) - - FieldMatcher( - ClassMatcher("entity.impl.User"), - theName = Some("firstName") - ).extension.size should be(1) - } - - test("the FieldMatcher should not match any element") { - - FieldMatcher(ClassMatcher("entity.impl.Contact")).extension should be(empty) - - FieldMatcher( - ClassMatcher("entity.impl.User"), - HasAtLeastTheAnnotations( - AnnotatedWith( - "entity.annotation.Column", - "name" -> StringValue("street"), - "nullable" -> BooleanValue(false) - ) - ) - ).extension should be(empty) - - FieldMatcher( - ClassMatcher("entity.impl.User"), - theType = Some("Ljava.lang.Integer;") - ).extension should be(empty) - - FieldMatcher( - ClassMatcher("entity.impl.User"), - theName = Some("street") - ).extension should be(empty) - } - - /* - * MethodMatcher - */ - test("the MethodMatcher should match methods of the class") { - - MethodMatcher( - ClassMatcher("entity.impl.User") - ).extension.size should be(12) - - MethodMatcher( - ClassMatcher("entity.impl.User"), - AnnotatedWith("entity.annotation.Transient") - ).extension.size should be(1) - - MethodMatcher( - ClassMatcher("entity.impl.User"), - MethodWithName("getFullName") - ).extension.size should be(1) - } - - test("the MethodMatcher should not match any element") { - MethodMatcher( - ClassMatcher("entity.impl.Contact") - ).extension should be(empty) - - MethodMatcher( - ClassMatcher("entity.impl.User"), - AnnotatedWith( - "entity.annotation.Column", - "name" -> StringValue("street"), - "nullable" -> BooleanValue(false) - ) - ).extension should be(empty) - - MethodMatcher( - ClassMatcher("entity.impl.User"), - MethodWithName("getStreet") - ).extension should be(empty) - } - -} diff --git a/OPAL/de/Readme.md b/OPAL/de/Readme.md deleted file mode 100644 index 8cb296670e..0000000000 --- a/OPAL/de/Readme.md +++ /dev/null @@ -1,2 +0,0 @@ -# Overview -The ***Dependency Extraction*** (DE) library can be used to extract (structural) dependencies found in Java bytecode. diff --git a/OPAL/de/build.sbt b/OPAL/de/build.sbt deleted file mode 100644 index b511e98651..0000000000 --- a/OPAL/de/build.sbt +++ /dev/null @@ -1 +0,0 @@ -// build settings reside in the opal root build.sbt file diff --git a/OPAL/de/src/main/scala/org/opalj/de/DependencyCountingDependencyProcessor.scala b/OPAL/de/src/main/scala/org/opalj/de/DependencyCountingDependencyProcessor.scala deleted file mode 100644 index 3d396f6768..0000000000 --- a/OPAL/de/src/main/scala/org/opalj/de/DependencyCountingDependencyProcessor.scala +++ /dev/null @@ -1,83 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj -package de - -import org.opalj.br.* - -/** - * A dependency processor that just counts the number of dependencies. - * - * Typically, a `DependencyProcessor` is passed to a [[DependencyExtractor]]. - * The latter calls back the `processDependency` methods for each identified dependency. - * - * @author Michael Eichberg - */ -class DependencyCountingDependencyProcessor extends DependencyProcessor { - - import java.util.concurrent.atomic.AtomicInteger - - protected val dependencyCount = new AtomicInteger(0) - override def processDependency( - source: VirtualSourceElement, - target: VirtualSourceElement, - dType: DependencyType - ): Unit = { - dependencyCount.incrementAndGet() - } - def currentDependencyCount: Int = dependencyCount.get - - protected val dependencyOnArraysCount = new AtomicInteger(0) - override def processDependency( - source: VirtualSourceElement, - arrayType: ArrayType, - dType: DependencyType - ): Unit = { - dependencyOnArraysCount.incrementAndGet() - } - def currentDependencyOnArraysCount: Int = dependencyOnArraysCount.get - - protected val dependencyOnPrimitivesCount = new AtomicInteger(0) - override def processDependency( - source: VirtualSourceElement, - baseType: BaseType, - dType: DependencyType - ): Unit = { - dependencyOnPrimitivesCount.incrementAndGet() - } - def currentDependencyOnPrimitivesCount: Int = dependencyOnPrimitivesCount.get - - final val DummyClassType = ClassType("<-DUMMY_CLASSTYPE->") - - final val DummyVirtualClass = VirtualClass(DummyClassType) - - override def asVirtualClass(classType: ClassType): VirtualClass = { - DummyVirtualClass - } - - final val DummyVirtualField = - VirtualField(DummyClassType, "<-DUMMY_FIELD->", DummyClassType) - - override def asVirtualField( - declaringClassType: ClassType, // Recall...new Int[]{1,2,3,...}.length => arraylength - name: String, - fieldType: FieldType - ): VirtualField = { - DummyVirtualField - } - - final val DummyVirtualMethod = - VirtualMethod( - DummyClassType, - "<-DUMMY_METHOD->", - MethodDescriptor.NoArgsAndReturnVoid - ) - - override def asVirtualMethod( - declaringClassType: ReferenceType, // Recall...new Int[]{1,2,3,...}.clone() - name: String, - descriptor: MethodDescriptor - ): VirtualMethod = { - DummyVirtualMethod - } - -} diff --git a/OPAL/de/src/main/scala/org/opalj/de/DependencyProcessorAdapter.scala b/OPAL/de/src/main/scala/org/opalj/de/DependencyProcessorAdapter.scala deleted file mode 100644 index 0a50b2204a..0000000000 --- a/OPAL/de/src/main/scala/org/opalj/de/DependencyProcessorAdapter.scala +++ /dev/null @@ -1,35 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj -package de - -import br.* - -/** - * Basic implementation of the `DependencyProcessor` trait that does nothing when a - * dependency is reported. - * - * @author Michael Eichberg - */ -class DependencyProcessorAdapter extends DependencyProcessor { - - override def processDependency( - source: VirtualSourceElement, - target: VirtualSourceElement, - dType: DependencyType - ): Unit = {} - - override def processDependency( - source: VirtualSourceElement, - baseType: ArrayType, - dType: DependencyType - ): Unit = {} - - override def processDependency( - source: VirtualSourceElement, - baseType: BaseType, - dType: DependencyType - ): Unit = {} - -} - -object DependencyProcessorAdapter extends DependencyProcessorAdapter diff --git a/OPAL/de/src/main/scala/org/opalj/de/DependencyProcessorDecorator.scala b/OPAL/de/src/main/scala/org/opalj/de/DependencyProcessorDecorator.scala deleted file mode 100644 index 373715fc03..0000000000 --- a/OPAL/de/src/main/scala/org/opalj/de/DependencyProcessorDecorator.scala +++ /dev/null @@ -1,45 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj -package de - -import br.* - -/** - * Decorator for a given [[DependencyProcessor]]. - * - * ==Usage Scenario== - * If some special processing of some `VirtualSourceElement`s needs to be done, but - * in other cases processing should just be delegated to another dependency processor. - * - * ==Thread Safety== - * This class is thread-safe if the specified base dependency processor is also thread-safe. - */ -class DependencyProcessorDecorator( - baseDependencyProcessor: DependencyProcessor -) extends DependencyProcessor { - - def processDependency( - source: VirtualSourceElement, - target: VirtualSourceElement, - dType: DependencyType - ): Unit = { - baseDependencyProcessor.processDependency(source, target, dType) - } - - def processDependency( - source: VirtualSourceElement, - arrayType: ArrayType, - dType: DependencyType - ): Unit = { - baseDependencyProcessor.processDependency(source, arrayType, dType) - } - - def processDependency( - source: VirtualSourceElement, - baseType: BaseType, - dType: DependencyType - ): Unit = { - baseDependencyProcessor.processDependency(source, baseType, dType) - } - -} diff --git a/OPAL/de/src/main/scala/org/opalj/de/DependencyStoreKey.scala b/OPAL/de/src/main/scala/org/opalj/de/DependencyStoreKey.scala deleted file mode 100644 index eebe0656e6..0000000000 --- a/OPAL/de/src/main/scala/org/opalj/de/DependencyStoreKey.scala +++ /dev/null @@ -1,23 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj -package de - -import org.opalj.br.analyses.ProjectInformationKey -import org.opalj.br.analyses.SomeProject - -/** - * Key that can be used to get a `DependencyStore` that contains all dependencies. - * - * ==Usage== - * Just pass this object to a `Project` to get the [[DependencyStore]]. - * - * @author Michael Eichberg - */ -object DependencyStoreKey extends ProjectInformationKey[DependencyStore, Nothing] { - - override def requirements(project: SomeProject): Seq[ProjectInformationKey[? <: AnyRef, Nothing]] = Nil - - override def compute(project: SomeProject): DependencyStore = { - DependencyStore(project.allClassFiles)(using project.logContext) - } -} diff --git a/OPAL/de/src/main/scala/org/opalj/de/DependencyStoreWithoutSelfDependenciesKey.scala b/OPAL/de/src/main/scala/org/opalj/de/DependencyStoreWithoutSelfDependenciesKey.scala deleted file mode 100644 index b3f8123654..0000000000 --- a/OPAL/de/src/main/scala/org/opalj/de/DependencyStoreWithoutSelfDependenciesKey.scala +++ /dev/null @@ -1,30 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj -package de - -import org.opalj.br.analyses.ProjectInformationKey -import org.opalj.br.analyses.SomeProject - -/** - * Key that can be used to get a `DependencyStore` that contains all dependencies - * except self dependencies. - * - * ==Usage== - * Just pass this object to a `Project` to get the [[DependencyStore]]. - * - * @author Michael Eichberg - */ -object DependencyStoreWithoutSelfDependenciesKey - extends ProjectInformationKey[DependencyStore, Nothing] { - - override def requirements(project: SomeProject): Seq[ProjectInformationKey[? <: AnyRef, Nothing]] = Nil - - override def compute(project: SomeProject): DependencyStore = { - def createDependencyProcessor(dp: DependencyProcessor) = { - val baseProcessor = new DependencyProcessorDecorator(dp) with FilterSelfDependencies - new DependencyExtractor(baseProcessor) - } - - DependencyStore(project.allClassFiles, createDependencyProcessor)(using project.logContext) - } -} diff --git a/OPAL/de/src/main/scala/org/opalj/de/DependencyTypes.scala b/OPAL/de/src/main/scala/org/opalj/de/DependencyTypes.scala deleted file mode 100644 index 8f1fc26b83..0000000000 --- a/OPAL/de/src/main/scala/org/opalj/de/DependencyTypes.scala +++ /dev/null @@ -1,137 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj -package de - -/** - * Enumeration of all kinds of dependencies that are extracted by the - * [[DependencyExtractor]]. - * - * @author Thomas Schlosser - * @author Michael Eichberg - * @author Marco Torsello - */ -object DependencyTypes extends Enumeration(0 /* <= value of first enumeration value*/ ) { - - val EXTENDS = Value("type declaration EXTENDS class type") - val IMPLEMENTS = Value("type declaration IMPLEMENTS interface type") - - val OUTER_CLASS = Value("class type declaration IS OUTER CLASS of method or type") - val INNER_CLASS = Value("class type declaration IS INNER CLASS of method or type") - - val REQUIRED_MODULE = Value("module IS REQUIRED BY module") - val USED_SERVICE = Value("class type declaration IS USED SERVICE INTERFACE of module") - val MODULE_MAIN_CLASS = Value("class type declaration IS MAIN CLASS of module") - - val NEST_HOST = Value("class type declaration IS NEST HOST CLASS of type") - val NEST_MEMBER = Value("class type declaration IS NEST MEMBER CLASS of type") - val PERMITTED_SUBCLASS = Value("class type declaration IS PERMITTED SUBCLASS of type") - - val INSTANCE_MEMBER = Value("field or method IS INSTANCE MEMBER of class type") - val CLASS_MEMBER = Value("field/method IS CLASS MEMBER of class/interface/annotation/enum") - val ENCLOSED = Value("class type declaration IS ENCLOSED by method or type") - - // field definition related dependency types - val FIELD_TYPE = Value("the FIELD has TYPE") - val CONSTANT_VALUE = Value("the field is initialized with a CONSTANT VALUE with TYPE") - - // method definition related dependency types - val PARAMETER_TYPE = Value("the method defines a PARAMETER with TYPE") - val RETURN_TYPE = Value("the method's RETURN TYPE") - val THROWN_EXCEPTION = Value("the method may THROW an exception of type") - - // code related dependency types - val CATCHES = Value("catches") - - val LOCAL_VARIABLE_TYPE = Value("the method has a LOCAL VARIABLE with TYPE") - - val TYPECAST = Value("performs a reference based TYPE CAST") - val TYPECHECK = Value("performs a TYPE CHECK using \"instanceOf\"") - - val CREATES_ARRAY = Value("CREATES a new ARRAY of type") - val CREATES = Value("CREATES a new instance of class") - - val READS_FIELD = Value("the method READS the value stored in the FIELD") - val WRITES_FIELD = Value("the method WRITES the value stored in the FIELD") - val DECLARING_CLASS_OF_ACCESSED_FIELD = Value("the method ACCESSES a FIELD that is DECLARED by CLASS") - val TYPE_OF_ACCESSED_FIELD = Value("the method ACCESSES a FIELD with TYPE") - val LOADS_CONSTANT = Value("the method DEFINES the constant") - - val CALLS_METHOD = Value("the method CALLS the METHOD") - val DECLARING_CLASS_OF_CALLED_METHOD = Value("the CALLED METHOD is DECLARED by TYPE") - val PARAMETER_TYPE_OF_CALLED_METHOD = Value("the method CALLS a METHOD that has a PARAMETER with TYPE") - val RETURN_TYPE_OF_CALLED_METHOD = Value("the method CALLS a METHOD that RETURNS a value with TYPE") - - // annotation related dependency types - // val ANNOTATED_WITH = Value("the class, field, method, type parameter, local variable, ... is ANNOTATED WITH") - val ANNOTATED_WITH = Value("the element is ANNOTATED WITH") - val PARAMETER_ANNOTATED_WITH = Value("the method's parameter is ANNOTATED WITH") - - // element value related dependency type - val ANNOTATION_DEFAULT_VALUE_TYPE = Value("the TYPE of the ANNOTATIONS DEFAULT VALUE") - val ANNOTATION_ELEMENT_TYPE = Value("the TYPE of the ANNOTATION's ELEMENT value") - val USES_ENUM_VALUE = Value("the annotation element's value is the ENUM VALUE") - - // signature/type parameter related dependency types - val TYPE_IN_TYPE_PARAMETERS = Value("the TYPE is used in the declaration of a TYPE PARAMETER (signature)") - - def bitMask(v: Value): Long = 1L << v.id - - def toSet(set: DependencyTypesBitSet): scala.collection.Set[DependencyType] = { - val max = maxId - var i = 0 - val dependencies = new scala.collection.mutable.HashSet[DependencyType] - while (i <= max) { - if (((set >> i) & 1) == 1) - dependencies += DependencyTypes(i) - i += 1 - } - dependencies - } - - def toUsageDescription(dependencyType: DependencyType): String = { - dependencyType match { - case EXTENDS => "extend class type" - case IMPLEMENTS => "implement interface type" - case OUTER_CLASS => "be outer class" - case INNER_CLASS => "be inner class" - case REQUIRED_MODULE => "be required module" - case USED_SERVICE => "be used service interface" - case MODULE_MAIN_CLASS => "be main class of module" - case NEST_HOST => "be nest host" - case NEST_MEMBER => "be nest member" - case PERMITTED_SUBCLASS => "be permitted subclass" - case INSTANCE_MEMBER => "be instance member" - case CLASS_MEMBER => "be class member" - case ENCLOSED => "be enclosed" - case FIELD_TYPE => "be of type" - case CONSTANT_VALUE => "be initialized with constant value" - case PARAMETER_TYPE => "have parameter" - case RETURN_TYPE => "return" - case THROWN_EXCEPTION => "throw exception" - case CATCHES => "catch exception" - case LOCAL_VARIABLE_TYPE => "have local variable" - case TYPECAST => "perform type cast" - case TYPECHECK => "perform type check" - case CREATES_ARRAY => "create array" - case CREATES => "create instance" - case READS_FIELD => "read field" - case WRITES_FIELD => "write field" - case DECLARING_CLASS_OF_ACCESSED_FIELD => "access field declared by" - case TYPE_OF_ACCESSED_FIELD => "access field" - case LOADS_CONSTANT => "load constant" - case CALLS_METHOD => "call method" - case DECLARING_CLASS_OF_CALLED_METHOD => "call method declared by" - case PARAMETER_TYPE_OF_CALLED_METHOD => "call method with parameter" - case RETURN_TYPE_OF_CALLED_METHOD => "call method with return type" - case ANNOTATED_WITH => "be annotated with" - case PARAMETER_ANNOTATED_WITH => "have parameter annotated with" - case ANNOTATION_DEFAULT_VALUE_TYPE => "have annotation default value type" - case ANNOTATION_ELEMENT_TYPE => "have annotation element value type" - case USES_ENUM_VALUE => "have enum value as annotation element value" - case TYPE_IN_TYPE_PARAMETERS => "be used in the declaration of a signature" - - case _ => - throw new UnknownError(s"unknown dependency type: $dependencyType") - } - } -} diff --git a/OPAL/de/src/main/scala/org/opalj/de/package.scala b/OPAL/de/src/main/scala/org/opalj/de/package.scala deleted file mode 100644 index ed912f4cbc..0000000000 --- a/OPAL/de/src/main/scala/org/opalj/de/package.scala +++ /dev/null @@ -1,16 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj - -/** - * Functionality to extract dependencies between class files. - * - * @author Michael Eichberg - */ -package object de { - - type DependencyType = DependencyTypes.Value - - type DependencyTypesSet = scala.collection.Set[DependencyType] - - type DependencyTypesBitSet = Long -} diff --git a/OPAL/de/src/test/resources/classfiles/invokedynamic_dependencies.jar b/OPAL/de/src/test/resources/classfiles/invokedynamic_dependencies.jar deleted file mode 100644 index ff97e53d4a07313d8ace46f134d0d37a1ac470c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2559 zcmaKudoxrAJrOQKw|l^G+pqOd8OxsF21bxDT82;UinM8uR0nULzIL=s|d zxy_}EOUO03rwfs!@U`#x{kom={XIYDbI$9$&hz;?&-Z^1YaB11Gyntw0gk&Rn*x53 z5P%PW#}JG)%`MHe*4qF8UVt@D5X5!x{MTmvuVLv;$B!`H*wWk#V@H7D%@*+;?G`vq zSmzd;CiGdy^M|(Z9>nX(02mg(*BswTDc}=g&dD`qGNGqdz-sE#H=zd8V3`T9S{mS* z&!>Qe0N_6*w#gsEaLb}Me{Kn30ARCNT@Z}B_@OPElPBp6$-{mTKE2X~WyR47E@sLVP`)wxV3NfEgp?|y!OLzjA`{hFz&S@y7% zW9gi(x+_u^=iyCXxQs#syeW|myCK4lZLdko=NIO;=xWAx>5_bq-@)s^LFz+qa-x*r zghzFHRm7K?@Q>lE-)jBY{I0SzkACO0({!h_9{OInbhd#OUL)6S`=U*rtEeHkkzYG6 z?zCE9*z$RTP96wBE}F?GD?Zh2<@6j@o;X%>C{U2BsFM!2=)8(cLpx-3%i1FGMV?qE z$AWl@%J{Lqd}Iu{EhA&WQyhU#z?8uC>g$Y}Um&&8bDK`~r!9_W1jyZdm~%{bG8Ez; zzo^%h={fVoCcf!HLmtN7DS64xJyBVFi;}#e+;%x51C+rEFm_p`1ez(X6P>!|#YZ+d z5DN;E3zL#*?Qrh2&~tltWVr~4uG>aV+!^i5!xu#9>K2QQbG&A*nNszQWv!7(@U z`(vhzU3z7W`M;BM0jw zTHw!8UMyX@L+~dYDlCiJ{Z__9?fKp05p~~N1wM>M$Cxm9`-|bd7*m~4#ShLdiY&K& z3;A`B6^CweVXX5rd9wQErK5w=w?c(25v7`OSfW!D+g*jG3@Y zMMvsK?|ko2=}rxSwS=da^5`BY0}2PBh9OrkQVP{)r`{BdQT=7ybD!a1$>t6I0ZX(d z{BVF=!qC)subQgcaY-M?0*!)t6}6^H2hfUWt#$M~5@{xk?rGw%;HNJT(V#8JrZI>a!!!WiNaI{>F_PSy4 zT{Db9u+_D9N*q;?_ub}PXEiTb{@G4RXZAtmo#cE?V=8uS$WH`xj$bQq*k$Dm0h5O^ zrg{>WPAP{}@BwR^?;c;(H=0E{%E){@OaE|2iU0evqz_*v?lhWW;X^cr&CG~R)zOsP z3M^w7iO;?jXjZ3CA=xlj(Og^wF(^cWS&yZhh?+`$lti&50n<^aM|Xxd?l{a`&qyY> z!nmbIk5|<6Uh)O~P_?1PLi@+gXP;ImHc;63NA9;FtZr;>fLRYIBJSzDR=mpYyIn!l z2!}33ESQ*r1K)1USR6roII-{j?4d!Kb{|T$YF4t$rTf&K*qtN^UqfvpgD95Q)&>Em z?1?WYo%V;i9P<%(d5}6Wd%|**mRoLIB9W`da%!IH(IY?4w`pwWM`~ z^p4v89SIk0^-~~dzn!+A+l#*Ca0001;$jSlsyTjPAx9vIotOg`>Nny2%E^3SV(?dG zl(_yGvQW9G^|&pCPute^oSMlo@<34WHoH*7h?7-mhZ2+rZmkZRQMiq(>tO|C`( zt6J1?e5)U>Iw>nAM8Xl33AO%eGkX?mmkr&i5M$D|XstL|!F$W_ntCYfh=j``lqC2b zWaSO6FUarW?Q=sHPsF94P%lrF&{yeq?>h^5XHHz+SMjp{wn{NI_|qb1>)iRZ2ToBN z@UQn;27D+GQccuul+plI#-*R?hhS}=tBTk9oE12BaI)1uKt4Y)?2{v7jdTE9w?06> zy~bu-FODfUeB>pkrCV4#GaoJ_a##xg{?((){*^qV!a*BE##;5EWpU#26>E@dc1Y)% ztQLPUZK{Np#BdG?maF~i>DY#Fk-(kW&6Pr&Z)YSpDVerRub z+Cs}TJko&Q z;pTtj!iAgP^@CQpsPkv^SKi>F%}*I_jz6NmfDZS9FyP<0v^#4$cHI83^o8;U4#DD<6;6EhyH#4I%Hvj+t diff --git a/OPAL/de/src/test/resources/sourcefiles/dependencies/SameClassDependencies.groovy b/OPAL/de/src/test/resources/sourcefiles/dependencies/SameClassDependencies.groovy deleted file mode 100644 index 43dd8a80b4..0000000000 --- a/OPAL/de/src/test/resources/sourcefiles/dependencies/SameClassDependencies.groovy +++ /dev/null @@ -1,17 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package dependencies; - -/** - * Test class for invokedynamic dependency extraction. - * - * @author Arne Lottmann - */ -public class SameClassDependencies { - - public void noArgumentsMethod() {} - - public void dependencies() { - noArgumentsMethod(); - } - -} \ No newline at end of file diff --git a/OPAL/de/src/test/scala/org/opalj/de/DependenciesOnTypesTest.scala b/OPAL/de/src/test/scala/org/opalj/de/DependenciesOnTypesTest.scala deleted file mode 100644 index 81b52dd14e..0000000000 --- a/OPAL/de/src/test/scala/org/opalj/de/DependenciesOnTypesTest.scala +++ /dev/null @@ -1,161 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj -package de - -import org.junit.runner.RunWith -import org.scalatest.flatspec.AnyFlatSpec -import org.scalatest.matchers.should.Matchers -import org.scalatestplus.junit.JUnitRunner - -import org.opalj.bi.TestResources.locateTestResources -import org.opalj.br.* -import org.opalj.br.reader.Java8Framework.ClassFile - -/** - * Tests that the dependency extractor extracts the types as desired. - * - * @author Michael Eichberg - */ -@RunWith(classOf[JUnitRunner]) -class DependenciesOnTypesTest extends AnyFlatSpec with Matchers { - - // - // - // Set up - // - // - val extractedBaseTypes = scala.collection.mutable.Set.empty[BaseType] - val extractedArrayTypes = scala.collection.mutable.Set.empty[ArrayType] - val extractedClassTypes = scala.collection.mutable.Set.empty[ClassType] - - def dependencyExtractor: DependencyExtractor = { - new DependencyExtractor( - new DependencyProcessorAdapter { - - override def processDependency( - source: VirtualSourceElement, - target: VirtualSourceElement, - dType: DependencyType - ): Unit = { - if (target.isClass) { - val VirtualClass(targetType) = target: @unchecked - extractedClassTypes += targetType - } - } - - override def processDependency( - source: VirtualSourceElement, - baseType: BaseType, - dType: DependencyType - ): Unit = { - extractedBaseTypes += baseType - } - - override def processDependency( - source: VirtualSourceElement, - arrayType: ArrayType, - dType: DependencyType - ): Unit = { - extractedArrayTypes += arrayType - } - } - ) - } - - // - // - // EXERCISE - // - // - val typesJAR = locateTestResources("types.jar", "bi") - val classFiles = ClassFile(typesJAR, "types/TypeDeclarations.class") - classFiles foreach (classFile => dependencyExtractor.process(classFile)) - - // - // - // VERIFY - // - // - - behavior of "DependencyExtractor" - - it should "extract a dependency to java.lang.Object" in { - assert( - extractedClassTypes contains ClassType.Object, - "the extractor did no report an existing dependency to java.lang.Object" - ) - } - - it should "extract a dependency to the type java.lang.Object[]" in { - assert(extractedArrayTypes contains ArrayType(ClassType.Object)) - } - - it should "extract a dependency to the type java.lang.Object[][]" in { - assert(extractedArrayTypes contains ArrayType(ArrayType(ClassType.Object))) - } - - it should "extract dependencies to byte" in { - assert((extractedBaseTypes contains ByteType)) - } - - it should "extract dependencies to short" in { - assert((extractedBaseTypes contains ShortType)) - } - - it should "extract dependencies to char" in { - assert((extractedBaseTypes contains CharType)) - } - - it should "extract dependencies to int" in { - assert((extractedBaseTypes contains IntegerType)) - } - - it should "extract dependencies to long" in { - assert((extractedBaseTypes contains LongType)) - } - - it should "extract dependencies to boolean" in { - assert((extractedBaseTypes contains BooleanType)) - } - - it should "extract dependencies to float" in { - assert((extractedBaseTypes contains FloatType)) - } - - it should "extract dependencies to double" in { - assert((extractedBaseTypes contains DoubleType)) - } - - it should "extract dependencies to byte arrays" in { - assert((extractedArrayTypes contains ArrayType(ByteType))) - } - - it should "extract dependencies to short arrays" in { - assert((extractedArrayTypes contains ArrayType(ShortType))) - } - - it should "extract dependencies to char arrays" in { - assert((extractedArrayTypes contains ArrayType(CharType))) - } - - it should "extract dependencies to int arrays" in { - assert((extractedArrayTypes contains ArrayType(IntegerType))) - } - - it should "extract dependencies to long arrays" in { - assert((extractedArrayTypes contains ArrayType(LongType))) - } - - it should "extract dependencies to boolean arrays" in { - assert((extractedArrayTypes contains ArrayType(BooleanType))) - } - - it should "extract dependencies to float arrays" in { - assert((extractedArrayTypes contains ArrayType(FloatType))) - } - - it should "extract dependencies to double arrays" in { - assert((extractedArrayTypes contains ArrayType(DoubleType))) - } - -} diff --git a/OPAL/de/src/test/scala/org/opalj/de/DependencyExtractorsHelper.scala b/OPAL/de/src/test/scala/org/opalj/de/DependencyExtractorsHelper.scala deleted file mode 100644 index a75e3b7060..0000000000 --- a/OPAL/de/src/test/scala/org/opalj/de/DependencyExtractorsHelper.scala +++ /dev/null @@ -1,94 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj -package de - -import org.opalj.bi.TestResources.locateTestResources -import org.opalj.br.ArrayType -import org.opalj.br.MethodDescriptor -import org.opalj.br.Type -import org.opalj.br.VirtualClass -import org.opalj.br.VirtualField -import org.opalj.br.VirtualMethod -import org.opalj.br.VirtualModule -import org.opalj.br.VirtualSourceElement -import org.opalj.br.reader.Java8Framework.ClassFiles - -/** - * Functionality useful when testing a dependency extractor. - * - * @author Michael Eichberg - */ -object DependencyExtractorsHelper { - - val FIELD_AND_METHOD_SEPARATOR = "." - - def sourceElementName(t: Type): String = { - if (t.isArrayType) t.asArrayType.elementType.toJava else t.toJava - } - - def sourceElementName(vClass: VirtualClass): String = sourceElementName(vClass.thisType) - - def sourceElementName(vField: VirtualField): String = { - sourceElementName(vField.declaringClassType) + FIELD_AND_METHOD_SEPARATOR + vField.name - } - - def sourceElementName(vMethod: VirtualMethod): String = { - sourceElementName(vMethod.declaringClassType) + - FIELD_AND_METHOD_SEPARATOR + - methodDescriptorToString(vMethod.name, vMethod.descriptor) - } - - def methodDescriptorToString(name: String, descriptor: MethodDescriptor): String = { - descriptor.parameterTypes.map { sourceElementName(_) }.mkString(name + "(", ", ", ")") - } - - def vseToString(vse: VirtualSourceElement): String = { - vse match { - case vm: VirtualModule => vm.name - case vc: VirtualClass => sourceElementName(vc) - case vm: VirtualMethod => sourceElementName(vm) - case vf: VirtualField => sourceElementName(vf) - } - } - - def extractDependencies( - folder: String, - jarFile: String, - createDependencyExtractor: (DependencyProcessor) => DependencyExtractor - ): Map[(String, String, DependencyType), Int] = { - var dependencies: Map[(String, String, DependencyType), Int] = Map.empty - - val dependencyExtractor = - createDependencyExtractor( - new DependencyProcessorAdapter() { - - override def processDependency( - source: VirtualSourceElement, - target: VirtualSourceElement, - dType: DependencyType - ): Unit = { - val key = ((vseToString(source), vseToString(target), dType)) - dependencies = dependencies.updated( - key, - dependencies.getOrElse(key, 0) + 1 - ) - } - override def processDependency( - source: VirtualSourceElement, - target: ArrayType, - dType: DependencyType - ): Unit = { - if (target.elementType.isClassType) { - processDependency(source, VirtualClass(target.elementType.asClassType), dType) - } - } - } - ) - def resources() = locateTestResources(jarFile, folder) - for ((classFile, _) <- ClassFiles(resources())) { - dependencyExtractor.process(classFile) - } - dependencies - } - -} diff --git a/OPAL/de/src/test/scala/org/opalj/de/ExtractDependenciesFromClassFilesTest.scala b/OPAL/de/src/test/scala/org/opalj/de/ExtractDependenciesFromClassFilesTest.scala deleted file mode 100644 index 62a3fc3bca..0000000000 --- a/OPAL/de/src/test/scala/org/opalj/de/ExtractDependenciesFromClassFilesTest.scala +++ /dev/null @@ -1,42 +0,0 @@ -/* BSD 2-Clause License - see OPAL/LICENSE for details. */ -package org.opalj -package de - -import java.util.zip.ZipFile - -import org.scalatest.flatspec.AnyFlatSpec -import org.scalatest.matchers.should.Matchers - -import org.opalj.bi.TestResources.allManagedBITestJARs -import org.opalj.br.reader.Java8Framework.ClassFile as ClassFileReader - -/** - * Tests whether all class files contained in the "test/classfiles" directory - * can be processed by the `DependencyExtractor` without failure. - * The results themselves will not be verified in these test cases. - * - * @author Thomas Schlosser - * @author Michael Eichberg - * @author Marco Jacobasch - */ -@org.junit.runner.RunWith(classOf[org.scalatestplus.junit.JUnitRunner]) -class ExtractDependenciesFromClassFilesTest extends AnyFlatSpec with Matchers { - - val dependencyExtractor = new DependencyExtractor(DependencyProcessorAdapter) - - for (file <- allManagedBITestJARs()) { - val zipfile = new ZipFile(file) - val jarName = zipfile.getName - val zipentries = (zipfile).entries - while (zipentries.hasMoreElements) { - val zipentry = zipentries.nextElement - if (!zipentry.isDirectory && zipentry.getName.endsWith(".class")) { - val className = zipentry.getName - it should (s"be able to extract dependencies of $className in $jarName") in { - val classFiles = ClassFileReader(() => zipfile.getInputStream(zipentry)) - classFiles foreach (classFile => dependencyExtractor.process(classFile)) - } - } - } - } -} diff --git a/README.markdown b/README.markdown index 451a742148..efd9a15f54 100644 --- a/README.markdown +++ b/README.markdown @@ -29,11 +29,7 @@ OPAL consists of several projects: * **IDE** (OPAL/ide): A generic implementation for IDE analyses. -* **Three Address Code** (OPAL/tac): Provides two 3-address code based intermediate representation. A naive one which is directly created based on the bytecode, and a higher-level SSA-like representation which directly provides a CFG as well as Def-Use information using the results of a basic abstract interpretation. - -* **Dependencies Extraction** (OPAL/de): Provides support for extracting and analyzing a project's source code dependencies. This project is the foundation for projects to, e.g., check architectures. - -* **Architecture Validation** (OPAL/av): A small framework to check a project's implemented architecture against a specified one. +* **Three Address Code** (OPAL/tac): Provides two 3-address code based intermediate representation. A naive one which is directly created based on the bytecode, and a higher-level SSA-like representation which directly provides a CFG as well as Def-Use information using the results of a basic abstract interpretation. * **Framework** (OPAL/framework): Basically just aggregates all subprojects to make it possible to easily get a consistent snapshot of all subprojects. In general, it is recommended to declare a dependency on this project when you want to use OPAL. diff --git a/build.sbt b/build.sbt index 46e3e5f3ea..2a41d3ab9c 100644 --- a/build.sbt +++ b/build.sbt @@ -174,8 +174,6 @@ lazy val `OPAL` = (project in file(".")) ifds, ide, tac, - de, - av, apk, framework, // bp, (just temporarily...) @@ -370,31 +368,6 @@ lazy val `BytecodeAssembler` = (project in file("OPAL/ba")) ) .configs(IntegrationTest) -// The project "DependenciesExtractionLibrary" depends on the abstract interpretation framework to -// be able to resolve calls using MethodHandle/MethodType/"invokedynamic"/... -lazy val de = `DependenciesExtractionLibrary` - -lazy val `DependenciesExtractionLibrary` = (project in file("OPAL/de")) - .settings(buildSettings *) - .settings( - name := "Dependencies Extraction Library", - Compile / doc / scalacOptions ++= Opts.doc.title("OPAL - Dependencies Extraction Library") - ) - .dependsOn(ai % "it->it;it->test;test->test;compile->compile") - .configs(IntegrationTest) - -lazy val av = `ArchitectureValidation` - -lazy val `ArchitectureValidation` = (project in file("OPAL/av")) - .settings(buildSettings *) - .settings( - name := "Architecture Validation", - Compile / doc / scalacOptions ++= Opts.doc.title("OPAL - Architecture Validation") - // Test / publishArtifact := true - ) - .dependsOn(de % "it->it;it->test;test->test;compile->compile") - .configs(IntegrationTest) - lazy val apk = `APK` lazy val `APK` = (project in file("OPAL/apk")) @@ -420,7 +393,6 @@ lazy val `Framework` = (project in file("OPAL/framework")) ) .dependsOn( ba % "it->it;it->test;test->test;compile->compile", - av % "it->it;it->test;test->test;compile->compile", tac % "it->it;it->test;test->test;compile->compile" ) .configs(IntegrationTest)