i found plugin that appears to address class-cycle issues found in class files


http://classycle.sourceforge.net/

Classycle<http://classycle.sourceforge.net/>
classycle.sourceforge.net
Home; Examples; Download; User Guide; API documentation; SourceForge project 
page. powered by : Classycle: Analysing Tools for Java Class and Package 
Dependencies


Using this exmaple:


public class ClassA
{
 public de.andrena.tools.nopackagecycles.ClassB classB=null; //detect this 
class cycle
}

public class ClassB extends ClassA
{
 public ClassA classA=null; //this is OK as it is Base Class
}



produces this xml output:


    <class name="de.andrena.tools.nopackagecycles.ClassA" 
sources="/fubar/Classycle1.4.2/classycle.jar" type="class" innerClass="false" 
size="389" usedBy="1" usesInternal="1" usesExternal="1" layer="0" 
cycle="de.andrena.tools.nopackagecycles.ClassA et al.">
      <classRef name="de.andrena.tools.nopackagecycles.ClassB" type="usedBy"/>
      <classRef name="java.lang.Object" type="usesExternal"/>                   
                      <!-- cycle here -->
      <classRef name="de.andrena.tools.nopackagecycles.ClassB" 
type="usesInternal"/>
    </class>

    <class name="de.andrena.tools.nopackagecycles.ClassB" 
sources="/fubar/Classycle1.4.2/classycle.jar" type="class" innerClass="false" 
size="412" usedBy="1" usesInternal="1" usesExternal="0" layer="0" 
cycle="de.andrena.tools.nopackagecycles.ClassA et al.">
      <classRef name="de.andrena.tools.nopackagecycles.ClassA" type="usedBy"/>
      <classRef name="de.andrena.tools.nopackagecycles.ClassA" 
type="usesInternal"/>
    </class>


I'll need to factor in some xslt magic to find cycle but I think we have a 
delta detected by this plugin


thanks all,

Martin
______________________________________________



________________________________
From: Martin Gainty <mgai...@hotmail.com>
Sent: Tuesday, January 10, 2017 12:05 PM
To: Maven Users List
Subject: Re: maven-enforcer-plugin rules question


i couldnt get it this cycle failure:

Test set: de.andrena.tools.nopackagecycles.PackageCycleCollectorPerformanceTest
-------------------------------------------------------------------------------
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.133 sec - in 
de.andrena.tools.nopackagecycles.PackageCycleCollectorPerformanceTest



package de.andrena.tools.nopackagecycles;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.empty;
import static org.hamcrest.Matchers.is;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import jdepend.framework.JavaPackage;
import org.junit.Before;
import org.junit.Test;
import de.andrena.tools.nopackagecycles.ClassB;

public class ClassB extends ClassA
{
 public ClassA classA=null; //OK
}



public class PackageCycleCollectorPerformanceTest {


//add one obvious cycle


    public void findRealPackageCycle() throws Exception {
JavaPackage javaPackage =new JavaPackage("de.andrena.tools.nopackagecycles");
JavaClass javaClassA=new JavaClass("ClassA");
javaPackage.addClass(javaClassA);
JavaClass javaClassB=new JavaClass("ClassB");
javaPackage.addClass(javaClassB);
allPackages.add(javaPackage);
   List<Set<JavaPackage>> cycles = new 
PackageCycleCollector().collectCycles(allPackages);
assertThat(cycles, is(empty()));
}
...
}


package de.andrena.tools.nopackagecycles;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.empty;
import static org.hamcrest.Matchers.is;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import jdepend.framework.JavaPackage;
import org.junit.Before;
import org.junit.Test;
import de.andrena.tools.nopackagecycles.ClassB;
public class ClassA
{
 public de.andrena.tools.nopackagecycles.ClassB classB=null; //detect this 
cycle!
}


what am i doing wrong?


Thanks Curtis

Martin
______________________________________________


________________________________
From: ctrueden.w...@gmail.com <ctrueden.w...@gmail.com> on behalf of Curtis 
Rueden <ctrue...@wisc.edu>
Sent: Tuesday, January 10, 2017 11:02 AM
To: Maven Users List
Subject: Re: maven-enforcer-plugin rules question

Hi Martin,

A quick Google search revealed this:
https://github.com/andrena/no-package-cycles-enforcer-rule
[https://avatars2.githubusercontent.com/u/1824230?v=3&s=400]<https://github.com/andrena/no-package-cycles-enforcer-rule>

GitHub - andrena/no-package-cycles-enforcer-rule 
...<https://github.com/andrena/no-package-cycles-enforcer-rule>
github.com
no-package-cycles-enforcer-rule - Shamelessly copied and improved from 
http://stackoverflow.com/questions/3416547/maven-jdepend-fail-build-with-cycles




I haven't tried it personally. Though now that I know about it, I'm sorely
tempted-it would certainly improve the API design.

Regards,
Curtis

--
Curtis Rueden
LOCI software architect - http://loci.wisc.edu/software
ImageJ2 lead, Fiji maintainer - http://imagej.net/User:Rueden
[https://gravatar.com/avatar/63df759e2779af56fd050a968ff98d09]<http://imagej.net/User:Rueden>

User:Rueden - ImageJ<http://imagej.net/User:Rueden>
imagej.net
What is Curtis working on? Primary projects. Here is a summary of my current 
projects, in priority order. I try to keep this list up to date. The ImageJ2 
paper.





On Tue, Jan 10, 2017 at 9:34 AM, Martin Gainty <mgai...@hotmail.com> wrote:

> I need to detect package cycles such as what is seen here:
>
> class ClassA
>
> {
>
>  ClassB classB; //detect this package cycle!
>
> }
> class ClassB extends ClassA
>
> {
>
> }
>
>
> which maven-enforcer-plugin rule will allow me to detect package cycle?
>
>
> http://maven.apache.org/enforcer/enforcer-rules/index.html
Apache Maven Enforcer Rules - Standard 
Rules<http://maven.apache.org/enforcer/enforcer-rules/index.html>
maven.apache.org
Standard Rules. The following standard rules ship along with the enforcer 
plugin: alwaysFail - Always fail... used to test plugin configuration. 
alwaysPass - Always ...



>
> Apache Maven Enforcer Rules - Standard Rules<http://maven.apache.org/
> enforcer/enforcer-rules/index.html>
> maven.apache.org
> Standard Rules. The following standard rules ship along with the enforcer
> plugin: alwaysFail - Always fail... used to test plugin configuration.
> alwaysPass - Always ...
>
>
>
>
> Thanks!
>
> Martin
> ______________________________________________
>
>

Reply via email to