Skip to content

Commit 5abf6bb

Browse files
author
Philipp Kraus
committed
reduce npath complexity
1 parent 0b870f9 commit 5abf6bb

File tree

2 files changed

+104
-126
lines changed

2 files changed

+104
-126
lines changed

TestCLanguageLabel.java

Lines changed: 56 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import java.net.URL;
4949
import java.nio.file.FileSystems;
5050
import java.nio.file.Files;
51+
import java.nio.file.Path;
5152
import java.nio.file.Paths;
5253
import java.text.MessageFormat;
5354
import java.util.Arrays;
@@ -190,55 +191,10 @@ public void testResourceString() throws IOException
190191
final Set<String> l_ignoredlabel = new HashSet<>();
191192

192193
// --- parse source and get label definition
193-
final Set<String> l_label = Collections.unmodifiableSet(
194-
Files.walk( Paths.get( SEARCHPATH ) )
195-
.filter( Files::isRegularFile )
196-
.filter( i -> i.toString().endsWith( ".java" ) )
197-
.flatMap( i ->
198-
{
199-
try
200-
{
201-
final CJavaVistor l_visitor = new CJavaVistor();
202-
new JavaParser().parse( i.toFile() ).getResult().get().accept( l_visitor, null );
203-
return l_visitor.labels().stream();
204-
}
205-
catch ( final IOException l_excpetion )
206-
{
207-
Assert.fail( MessageFormat.format( "io error on file [{0}]: {1}", i, l_excpetion.getMessage() ) );
208-
return Stream.empty();
209-
}
210-
catch ( final ParseProblemException l_exception )
211-
{
212-
// add label build by class path to the ignore list
213-
l_ignoredlabel.add(
214-
i.toAbsolutePath().toString()
215-
// remove path to class directory
216-
.replace(
217-
FileSystems.getDefault()
218-
.provider()
219-
.getPath( SEARCHPATH )
220-
.toAbsolutePath()
221-
.toString(),
222-
""
223-
)
224-
// string starts with path separator
225-
.substring( 1 )
226-
// remove file extension
227-
.replace( ".java", "" )
228-
// replace separators with dots
229-
.replace( "/", CLASSSEPARATOR )
230-
// convert to lower-case
231-
.toLowerCase()
232-
// remove package-root name
233-
.replace( CCommon.PACKAGEROOT + CLASSSEPARATOR, "" )
234-
);
235-
236-
System.err.println( MessageFormat.format( "parsing error on file [{0}]:\n{1}", i, l_exception.getMessage() ) );
237-
return Stream.empty();
238-
}
239-
} )
240-
.collect( Collectors.toSet() )
241-
);
194+
final Set<String> l_label = Files.walk( Paths.get( SEARCHPATH ) )
195+
.filter( Files::isRegularFile )
196+
.filter( i -> i.toString().endsWith( ".java" ) )
197+
.flatMap( i -> labels( i, l_ignoredlabel ) ).collect( Collectors.toUnmodifiableSet() );
242198

243199
// --- check of any label is found
244200
Assert.assertFalse( "translation labels are empty, check naming of translation method", l_label.isEmpty() );
@@ -299,6 +255,57 @@ public void testResourceString() throws IOException
299255
} );
300256
}
301257

258+
/**
259+
* get labels
260+
*
261+
* @param p_file input java file
262+
* @param p_ignoredlabel ignoring labels (will be append)
263+
* @return label stream
264+
*/
265+
private static Stream<String> labels( @Nonnull final Path p_file, @Nonnull final Set<String> p_ignoredlabel )
266+
{
267+
try
268+
{
269+
final CJavaVistor l_visitor = new CJavaVistor();
270+
new JavaParser().parse( p_file.toFile() ).getResult().get().accept( l_visitor, null );
271+
return l_visitor.labels().stream();
272+
}
273+
catch ( final IOException l_excpetion )
274+
{
275+
Assert.fail( MessageFormat.format( "io error on file [{0}]: {1}", p_file, l_excpetion.getMessage() ) );
276+
return Stream.empty();
277+
}
278+
catch ( final ParseProblemException l_exception )
279+
{
280+
// add label build by class path to the ignore list
281+
p_ignoredlabel.add(
282+
p_file.toAbsolutePath().toString()
283+
// remove path to class directory
284+
.replace(
285+
FileSystems.getDefault()
286+
.provider()
287+
.getPath( SEARCHPATH )
288+
.toAbsolutePath()
289+
.toString(),
290+
""
291+
)
292+
// string starts with path separator
293+
.substring( 1 )
294+
// remove file extension
295+
.replace( ".java", "" )
296+
// replace separators with dots
297+
.replace( "/", CLASSSEPARATOR )
298+
// convert to lower-case
299+
.toLowerCase()
300+
// remove package-root name
301+
.replace( CCommon.PACKAGEROOT + CLASSSEPARATOR, "" )
302+
);
303+
304+
System.err.println( MessageFormat.format( "parsing error on file [{0}]:\n{1}", p_file, l_exception.getMessage() ) );
305+
return Stream.empty();
306+
}
307+
}
308+
302309

303310
/**
304311
* concats an URL with a path

action/CTestEqual.java

Lines changed: 48 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,12 @@
2323

2424
package org.lightjason.agentspeak.testing.action;
2525

26+
import com.codepoetics.protonpack.StreamUtils;
2627
import com.google.common.collect.Multimap;
2728
import org.lightjason.agentspeak.action.IBaseAction;
2829
import org.lightjason.agentspeak.common.CPath;
2930
import org.lightjason.agentspeak.common.IPath;
31+
import org.lightjason.agentspeak.language.CCommon;
3032
import org.lightjason.agentspeak.language.CRawTerm;
3133
import org.lightjason.agentspeak.language.ITerm;
3234
import org.lightjason.agentspeak.language.execution.IContext;
@@ -37,6 +39,7 @@
3739
import java.util.Collection;
3840
import java.util.List;
3941
import java.util.Map;
42+
import java.util.Objects;
4043
import java.util.stream.Stream;
4144

4245

@@ -67,118 +70,86 @@ public int minimalArgumentNumber()
6770
return 2;
6871
}
6972

73+
7074
@Nonnull
7175
@Override
72-
public Stream<IFuzzyValue<?>> execute( final boolean p_parallel, @Nonnull final IContext p_context, @Nonnull final List<ITerm> p_argument,
73-
@Nonnull final List<ITerm> p_return
74-
)
76+
public final Stream<IFuzzyValue<?>> execute( final boolean p_parallel, @Nonnull final IContext p_context,
77+
@Nonnull final List<ITerm> p_argument, @Nonnull final List<ITerm> p_return )
7578
{
76-
if ( org.lightjason.agentspeak.language.CCommon.isssignableto( p_argument.get( 0 ), Collection.class ) )
77-
return this.pack(
78-
p_return,
79-
p_argument.stream()
80-
.skip( 1 )
81-
.map( i -> p_argument.get( 0 ).equals( i )
82-
|| org.lightjason.agentspeak.language.CCommon.isssignableto( i, Collection.class )
83-
&& equalcollection( p_argument.get( 0 ).<Collection<?>>raw().toArray(), i.raw() )
84-
)
85-
);
86-
87-
if ( org.lightjason.agentspeak.language.CCommon.isssignableto( p_argument.get( 0 ), Map.class ) )
88-
return this.pack(
89-
p_return,
90-
p_argument.stream()
91-
.skip( 1 )
92-
.map( i -> p_argument.get( 0 ).equals( i )
93-
|| org.lightjason.agentspeak.language.CCommon.isssignableto( i, Map.class )
94-
&& equalmap( p_argument.get( 0 ).raw(), i.raw() )
95-
)
96-
);
97-
98-
if ( org.lightjason.agentspeak.language.CCommon.isssignableto( p_argument.get( 0 ), Multimap.class ) )
99-
return this.pack(
100-
p_return,
101-
p_argument.stream()
102-
.skip( 1 )
103-
.map( i -> p_argument.get( 0 ).equals( i )
104-
|| org.lightjason.agentspeak.language.CCommon.isssignableto( i, Multimap.class )
105-
&& equalmultimap( p_argument.get( 0 ).raw(), i.raw() )
106-
)
107-
);
108-
109-
110-
return this.pack(
111-
p_return,
112-
p_argument.stream()
113-
.skip( 1 )
114-
.map( i -> equalobject( p_argument.get( 0 ).<Object>raw(), i.<Object>raw() ) )
115-
);
116-
}
79+
StreamUtils.windowed(
80+
p_argument.stream(),
81+
2,
82+
2
83+
).map( i -> CCommon.streamconcatstrict(
84+
equalcollection( i.get( 0 ), i.get( 1 ) ),
85+
equalmap( i.get( 0 ), i.get( 1 ) ),
86+
equalmultimap( i.get( 0 ), i.get( 1 ) ),
87+
equalobject( i.get( 0 ), i.get( 1 ) ) ).filter( j -> j ).findFirst().orElse( false )
88+
).map( CRawTerm::of ).forEach( p_return::add );
11789

118-
/**
119-
* pack the result values into term
120-
*
121-
* @param p_return return item list
122-
* @param p_stream boolean input stream
123-
* @return boolean flag
124-
*/
125-
private Stream<IFuzzyValue<?>> pack( @Nonnull final List<ITerm> p_return, @Nonnull final Stream<Boolean> p_stream )
126-
{
127-
p_stream.map( CRawTerm::of ).forEach( p_return::add );
12890
return Stream.of();
12991
}
13092

131-
13293
/**
13394
* compare any objects
13495
*
135-
* @param p_source source object
136-
* @param p_target object to compare
137-
* @return equality boolean flag
96+
* @param p_source source term
97+
* @param p_target target term
98+
* @return equality boolean flag as stream
13899
*/
139-
private static boolean equalobject( @Nonnull final Object p_source, @Nonnull final Object p_target )
100+
private static Stream<Boolean> equalobject( @Nonnull final ITerm p_source, @Nonnull final ITerm p_target )
140101
{
141-
return p_source.equals( p_target );
102+
return Objects.isNull( p_source.raw() ) && Objects.isNull( p_target.raw() )
103+
? Stream.of( true )
104+
: Objects.isNull( p_source.raw() ) ^ Objects.isNull( p_target.raw() )
105+
? Stream.of( false )
106+
: Stream.of( p_source.raw().equals( p_target.raw() ) );
142107
}
143108

144109

145110
/**
146111
* compares collections
147112
*
148-
* @param p_source source array (converted collection to array)
149-
* @param p_target collection to compare
150-
* @return equality boolean flag
113+
* @param p_source source term
114+
* @param p_target target term
115+
* @return equality boolean flag as stream
151116
*/
152-
private static boolean equalcollection( @Nonnull final Object[] p_source, @Nonnull final Collection<?> p_target )
117+
private static Stream<Boolean> equalcollection( @Nonnull final ITerm p_source, @Nonnull final ITerm p_target )
153118
{
154-
return Arrays.equals( p_source, p_target.toArray() );
119+
return CCommon.isssignableto( p_source, Collection.class ) && CCommon.isssignableto( p_target, Collection.class )
120+
? Stream.of( Arrays.equals( p_source.<Collection<?>>raw().toArray(), p_target.<Collection<?>>raw().toArray() ) )
121+
: Stream.of();
155122
}
156123

157124

158125
/**
159126
* compare maps
160127
*
161-
* @param p_source source map
162-
* @param p_target map to compare
163-
* @return equality boolean flag
128+
* @param p_source source object
129+
* @param p_target object to compare
130+
* @return equality boolean flag as stream
164131
*/
165-
private static boolean equalmap( @Nonnull final Map<?, ?> p_source, @Nonnull final Map<?, ?> p_target )
132+
private static Stream<Boolean> equalmap( @Nonnull final ITerm p_source, @Nonnull final ITerm p_target )
166133
{
167-
return Arrays.equals( p_source.keySet().toArray(), p_target.keySet().toArray() )
168-
&& Arrays.equals( p_source.values().toArray(), p_target.values().toArray() );
134+
return CCommon.isssignableto( p_source, Map.class ) && CCommon.isssignableto( p_target, Map.class )
135+
? Stream.of( Arrays.equals( p_source.<Map<?, ?>>raw().keySet().toArray(), p_target.<Map<?, ?>>raw().keySet().toArray() )
136+
&& Arrays.equals( p_source.<Map<?, ?>>raw().values().toArray(), p_target.<Map<?, ?>>raw().values().toArray() ) )
137+
: Stream.of();
169138
}
170139

171140

172141
/**
173142
* compare multimap
174143
*
175-
* @param p_source source multimap
176-
* @param p_target multimap to compare
177-
* @return equality boolean flag
144+
* @param p_source source object
145+
* @param p_target object to compare
146+
* @return equality boolean flag as stream
178147
*/
179-
private static boolean equalmultimap( @Nonnull final Multimap<?, ?> p_source, @Nonnull final Multimap<?, ?> p_target )
148+
private static Stream<Boolean> equalmultimap( @Nonnull final ITerm p_source, @Nonnull final ITerm p_target )
180149
{
181-
return Arrays.equals( p_source.asMap().keySet().toArray(), p_target.asMap().keySet().toArray() )
182-
&& Arrays.equals( p_source.values().toArray(), p_target.values().toArray() );
150+
return CCommon.isssignableto( p_source, Multimap.class ) && CCommon.isssignableto( p_target, Multimap.class )
151+
? Stream.of( Arrays.equals( p_source.<Multimap<?, ?>>raw().keySet().toArray(), p_target.<Multimap<?, ?>>raw().keySet().toArray() )
152+
&& Arrays.equals( p_source.<Multimap<?, ?>>raw().values().toArray(), p_target.<Multimap<?, ?>>raw().values().toArray() ) )
153+
: Stream.of();
183154
}
184155
}

0 commit comments

Comments
 (0)