diff --git a/src/fr/inrialpes/exmo/align/impl/BasicAlignment.java b/src/fr/inrialpes/exmo/align/impl/BasicAlignment.java index c6558a929c50af9a97647b0ccaabd1d8c93d3c49..34d37b076bc475237d224422ad71e6292eb01993 100644 --- a/src/fr/inrialpes/exmo/align/impl/BasicAlignment.java +++ b/src/fr/inrialpes/exmo/align/impl/BasicAlignment.java @@ -132,7 +132,6 @@ public class BasicAlignment implements Alignment, Extensible { public void init( Object onto1, Object onto2 ) throws AlignmentException { try { Class<?>[] cArg = { String.class }; - //relationConstructor = (Constructor<Relation>)relationType.getConstructor( cArg ); relationCreationMethod = relationType.getMethod( "createRelation", cArg); } catch ( NoSuchMethodException nsmex ) { // Should be different if NoSuchMethodException or IllegalAccessException @@ -243,7 +242,9 @@ public class BasicAlignment implements Alignment, Extensible { try { Class<?> cl = Class.forName( classname ); if ( Relation.class.isAssignableFrom( cl ) ) { - relationType = (Class<? extends Relation>)cl; + @SuppressWarnings("unchecked") // Yes, that's ridiculous... + Class<? extends Relation> r = (Class<? extends Relation>)cl; + relationType = r; } else { throw new AlignmentException( "Class "+classname+" does not implement the Relation interface" ); } @@ -354,14 +355,17 @@ public class BasicAlignment implements Alignment, Extensible { // Any of them... call the local createRelation()... // First try to understand the relation as correct try { - //return relationConstructor.newInstance( rel ); return (Relation)relationCreationMethod.invoke( null, rel ); } catch ( Exception ex ) { try { // Create a relation from classname - Class<?> relationClass = Class.forName(rel); - Class<?>[] cArg = { String.class }; - Constructor<Relation> localRelationConstructor = (Constructor<Relation>)relationClass.getConstructor( cArg ); - return localRelationConstructor.newInstance( "rel" ); + Class<?> relationClass = (Class<?>)Class.forName(rel); + if ( Relation.class.isAssignableFrom( relationClass ) ) { + Class<?>[] cArg = { String.class }; + @SuppressWarnings("unchecked") // Yes, that's ridiculous... + Constructor<Relation> localRelationConstructor = ((Class<Relation>)relationClass).getConstructor( cArg ); + return localRelationConstructor.newInstance( "rel" ); + } else throw new AlignmentException( "Unknown relation class "+rel ); + // Exception will be caught just below } catch ( Exception ex2 ) { logger.debug( "IGNORED Exception: created Basic Relation)", ex ); //Otherwise, just create a Basic relation diff --git a/src/fr/inrialpes/exmo/align/impl/BitSetDisjunctiveRelation.java b/src/fr/inrialpes/exmo/align/impl/BitSetDisjunctiveRelation.java index 70270c00b9ee8ec8b73ab64c36fd4a3e7073f062..0384c25bf425ff28ad48268a22ca9afe28158173 100644 --- a/src/fr/inrialpes/exmo/align/impl/BitSetDisjunctiveRelation.java +++ b/src/fr/inrialpes/exmo/align/impl/BitSetDisjunctiveRelation.java @@ -85,7 +85,7 @@ public abstract class BitSetDisjunctiveRelation<T extends BaseRelation> extends } /** intersection */ - protected BitSet protojoin( BitSetDisjunctiveRelation<T>... drs ) { + @SafeVarargs protected final BitSet protojoin( BitSetDisjunctiveRelation<T>... drs ) { BitSet bs = (BitSet)relset.clone(); for( BitSetDisjunctiveRelation<T> dr : drs ) { bs.and( dr.getRelations() ); @@ -93,12 +93,12 @@ public abstract class BitSetDisjunctiveRelation<T extends BaseRelation> extends return bs; } - public DisjunctiveRelation<T> join( DisjunctiveRelation<T>... drs ) throws AlignmentException { + @SuppressWarnings({"unchecked", "varargs"}) public DisjunctiveRelation<T> join( DisjunctiveRelation<T>... drs ) throws AlignmentException { throw new AlignmentException( "Cannot join relations from heterogeneous algebras" ); } /** union */ - protected BitSet protomeet( BitSetDisjunctiveRelation<T>... drs ) { + @SafeVarargs protected final BitSet protomeet( BitSetDisjunctiveRelation<T>... drs ) { BitSet bs = (BitSet)relset.clone(); for( BitSetDisjunctiveRelation<T> dr : drs ) { bs.or( dr.getRelations() ); @@ -106,7 +106,7 @@ public abstract class BitSetDisjunctiveRelation<T extends BaseRelation> extends return bs; } - public DisjunctiveRelation<T> meet( DisjunctiveRelation<T>... drs ) throws AlignmentException { + @SuppressWarnings({"unchecked", "varargs"}) public DisjunctiveRelation<T> meet( DisjunctiveRelation<T>... drs ) throws AlignmentException { throw new AlignmentException( "Cannot meet relations from heterogeneous algebras" ); } @@ -181,9 +181,11 @@ public abstract class BitSetDisjunctiveRelation<T extends BaseRelation> extends return ( ( relset.nextSetBit( index ) != -1 ) ); } - public T next() { + // The class is private and always called with the proper T + // Would be nice to tell, its the same T + @SuppressWarnings({"unchecked"}) public T next() { index = relset.nextSetBit( index ); - if ( index != -1 ) return (T)getRelation( index++ ); + if ( index != -1 ) return (T)getRelation( index++ ); //[W: unchecked] else throw new IllegalStateException(); } } diff --git a/src/fr/inrialpes/exmo/align/impl/DisjunctiveRelation.java b/src/fr/inrialpes/exmo/align/impl/DisjunctiveRelation.java index f369293eefd546ef08712981b87c9d2ca6bc214c..45c423fd5bdf9e76459a18a2bbd48eb404a52306 100644 --- a/src/fr/inrialpes/exmo/align/impl/DisjunctiveRelation.java +++ b/src/fr/inrialpes/exmo/align/impl/DisjunctiveRelation.java @@ -39,9 +39,9 @@ public interface DisjunctiveRelation<T extends BaseRelation> extends Relation, I public T getRelation( String rel ); - public DisjunctiveRelation<T> join( DisjunctiveRelation<T>... drs ) throws AlignmentException; + @SuppressWarnings({"unchecked", "varargs"}) public DisjunctiveRelation<T> join( DisjunctiveRelation<T>... drs ) throws AlignmentException; - public DisjunctiveRelation<T> meet( DisjunctiveRelation<T>... drs ) throws AlignmentException; + @SuppressWarnings({"unchecked", "varargs"}) public DisjunctiveRelation<T> meet( DisjunctiveRelation<T>... drs ) throws AlignmentException; public boolean isEmpty(); diff --git a/src/fr/inrialpes/exmo/align/impl/edoal/Comparator.java b/src/fr/inrialpes/exmo/align/impl/edoal/Comparator.java index 597ffd42e13327bc63671370b54a9d36fcf29f85..c2574f3d05f7c1b7e59cbd79dca020e0aec753b5 100644 --- a/src/fr/inrialpes/exmo/align/impl/edoal/Comparator.java +++ b/src/fr/inrialpes/exmo/align/impl/edoal/Comparator.java @@ -81,4 +81,8 @@ public class Comparator { else return uri.equals( ((Comparator)ob).getURI() ); } + public int hashCode() { + return 17+7*uri.hashCode(); + } + } diff --git a/src/fr/inrialpes/exmo/align/impl/eval/GraphEvaluator.java b/src/fr/inrialpes/exmo/align/impl/eval/GraphEvaluator.java index 4538083ab2296d9b1138ee0248962e6c8a05c3a7..d257af41d0608ee6dc703d33286b004ea8b3b73f 100644 --- a/src/fr/inrialpes/exmo/align/impl/eval/GraphEvaluator.java +++ b/src/fr/inrialpes/exmo/align/impl/eval/GraphEvaluator.java @@ -1,7 +1,7 @@ /* * $Id$ * - * Copyright (C) INRIA, 2004-2005, 2007-2010, 2013-2014 + * Copyright (C) INRIA, 2004-2005, 2007-2010, 2013-2015 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -214,17 +214,17 @@ public abstract class GraphEvaluator { public abstract String xlabel(); public abstract String ylabel(); -} - -class EvalCell { - Cell cell = null; - boolean correct = false; - public EvalCell( Cell c, boolean b ){ - cell = c; - correct = b; + class EvalCell { + Cell cell = null; + boolean correct = false; + + public EvalCell( Cell c, boolean b ){ + cell = c; + correct = b; + } + + public boolean correct() { return correct; } + public Cell cell() { return cell; } } - - public boolean correct() { return correct; } - public Cell cell() { return cell; } } diff --git a/src/fr/inrialpes/exmo/align/impl/rel/A5AlgebraRelation.java b/src/fr/inrialpes/exmo/align/impl/rel/A5AlgebraRelation.java index 7d6ce848f8e85a7da3cda6e58f012872600ecdb8..2a103f890f757cda45485265e5e01708281cee7c 100644 --- a/src/fr/inrialpes/exmo/align/impl/rel/A5AlgebraRelation.java +++ b/src/fr/inrialpes/exmo/align/impl/rel/A5AlgebraRelation.java @@ -225,11 +225,11 @@ public class A5AlgebraRelation extends BitSetAlgebraRelation<A5BaseRelation> { return new A5AlgebraRelation( protoinverse() ); } - public A5AlgebraRelation join( A5AlgebraRelation... drs ) { + public final A5AlgebraRelation join( A5AlgebraRelation... drs ) { return new A5AlgebraRelation( protojoin( drs ) ); } - public A5AlgebraRelation meet( A5AlgebraRelation... drs ) { + public final A5AlgebraRelation meet( A5AlgebraRelation... drs ) { return new A5AlgebraRelation( protomeet( drs ) ); }