Skip to content

Commit 21b2a04

Browse files
committed
refactoring
1 parent cb2dd40 commit 21b2a04

File tree

8 files changed

+63
-45
lines changed

8 files changed

+63
-45
lines changed

src/main/java/com/igormaznitsa/prologparser/terms/OpContainer.java

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@
2626
import com.igormaznitsa.prologparser.tokenizer.OpAssoc;
2727
import com.igormaznitsa.prologparser.utils.StringBuilderEx;
2828

29+
import java.util.Objects;
30+
import java.util.stream.Collectors;
31+
import java.util.stream.Stream;
32+
2933
/**
3034
* Container of operators which have same name.
3135
*/
@@ -97,7 +101,7 @@ public boolean add(final Op operator) {
97101
return true;
98102
}
99103

100-
public void removeAll() {
104+
public void clear() {
101105
this.opFZ = null;
102106
this.opZF = null;
103107
this.opZFZ = null;
@@ -192,7 +196,7 @@ public int size() {
192196
*
193197
* @return the found only operator, null if there are severe operators
194198
*/
195-
public Op getOperatorIfSingle() {
199+
public Op getIfSingle() {
196200
Op found = null;
197201
if (this.numberAtContainer == 1) {
198202
if (this.opZFZ != null) {
@@ -277,10 +281,7 @@ public Op findForType(final OpAssoc type) {
277281
throw new CriticalUnexpectedError();
278282
}
279283

280-
if (result != null && result.getOpAssoc() == type) {
281-
return result;
282-
}
283-
return null;
284+
return result == null || result.getOpAssoc() != type ? null : result;
284285
}
285286

286287
/**
@@ -355,20 +356,11 @@ public int getPrecedence() {
355356

356357
@Override
357358
public String toString() {
358-
final StringBuilderEx result = new StringBuilderEx("OpContainer [");
359-
360-
boolean added = false;
361-
final Op[] ops = new Op[] {this.opFZ, this.opZF, this.opZFZ};
362-
for (final Op op : ops) {
363-
if (op != null) {
364-
if (added) {
365-
result.append(' ');
366-
}
367-
result.append(op.toString());
368-
added = true;
369-
}
370-
}
371-
372-
return result.append(']').toString();
359+
final StringBuilderEx result = new StringBuilderEx("OpContainer ");
360+
result.append(Stream.of(this.opFZ, this.opZF, this.opZFZ)
361+
.filter(Objects::nonNull)
362+
.map(Op::toString)
363+
.collect(Collectors.joining(" ", "[", "]")));
364+
return result.toString();
373365
}
374366
}

src/main/java/com/igormaznitsa/prologparser/terms/PrologStruct.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -162,17 +162,13 @@ public boolean isBlock() {
162162
return this.functor == Op.VIRTUAL_OPERATOR_BLOCK;
163163
}
164164

165-
public List<PrologTerm> fillElementsForComma(final List<PrologTerm> list) {
165+
public List<PrologTerm> flatComma(final List<PrologTerm> list) {
166166
if (this.functor == Op.METAOPERATOR_COMMA) {
167167
for (final PrologTerm t : this.elements) {
168-
if (t instanceof PrologStruct) {
169-
((PrologStruct) t).fillElementsForComma(list);
170-
} else {
171-
list.add(t);
172-
}
168+
t.flatComma(list);
173169
}
174170
} else {
175-
list.add(this);
171+
super.flatComma(list);
176172
}
177173
return list;
178174
}

src/main/java/com/igormaznitsa/prologparser/terms/PrologTerm.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
import java.io.Serializable;
2828
import java.math.BigDecimal;
29+
import java.util.List;
2930
import java.util.stream.Stream;
3031

3132
import static com.igormaznitsa.prologparser.utils.AssertUtils.assertNotNull;
@@ -77,6 +78,11 @@ public static QuotingType findAppropriateQuoting(final String atomText) {
7778
return result;
7879
}
7980

81+
public List<PrologTerm> flatComma(final List<PrologTerm> list) {
82+
list.add(this);
83+
return list;
84+
}
85+
8086
public int getArity() {
8187
return 1;
8288
}

src/main/java/com/igormaznitsa/prologparser/tokenizer/Op.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ public final class Op extends SpecServiceCompound {
7070
public static final Op GNU_STAR_THEN = make(1050, OpAssoc.XFY, "*->");
7171
public static final Op GNU_DOUBLE_DOT = make(600, OpAssoc.XFY, ":");
7272

73+
/**
74+
* Set of operators for ISO Prolog standard.
75+
*/
7376
public static final Op[] ISO = {
7477
ISO_CLAUSES,
7578
ISO_DIRECTIVES,
@@ -91,13 +94,19 @@ public final class Op extends SpecServiceCompound {
9194
make(100, OpAssoc.XFX, "@")
9295
};
9396

97+
/**
98+
* Set of operators is specific for GNU Prolog use.
99+
*/
94100
public static final Op[] GNU_SPECIFIC = {
95101
GNU_STAR_THEN,
96102
GNU_DOUBLE_DOT,
97103
GNU_DIV_RDIV,
98104
GNU_UNARY_PLUS,
99105
};
100106

107+
/**
108+
* Set of operators is specific for SWI Prolog use
109+
*/
101110
public static final Op[] SWI_SPECIFIC = {
102111
make(1150, OpAssoc.FX, "dynamic", "discontiguous", "initialization", "meta_predicate", "module_transparent", "multifile", "public", "thread_local", "thread_initialization", "volatile"),
103112
GNU_STAR_THEN,
@@ -111,8 +120,14 @@ public final class Op extends SpecServiceCompound {
111120
make(1, OpAssoc.FX, "$")
112121
};
113122

123+
/**
124+
* Set of operators for SWI Prolog.
125+
*/
114126
public static final Op[] SWI = Op.join(ISO, SWI_SPECIFIC);
115127

128+
/**
129+
* Set of Finite Domain operators for GNU Prolog.
130+
*/
116131
public static final Op[] GNU_FD = {
117132
make(750, XFY, "#<=>", "#\\<=>"),
118133
make(740, XFY, "#==>", "#\\==>"),
@@ -123,8 +138,14 @@ public final class Op extends SpecServiceCompound {
123138
make(700, XFX, "#=", "#\\=", "#<", "#=<", "#>", "#>=", "#=#", "#\\=#", "#<#", "#=<#", "#>#", "#>=#")
124139
};
125140

141+
/**
142+
* Set of operators for GNU Prolog.
143+
*/
126144
public static final Op[] GNU = Op.join(ISO, GNU_SPECIFIC);
127145

146+
/**
147+
* Set of Constraint Logic Programming operators for SWI Prolog.
148+
*/
128149
public static final Op[] SWI_CPL = {
129150
make(300, FY, "~"),
130151
make(500, YFX, "#"),

src/main/java/com/igormaznitsa/prologparser/tokenizer/PrologParser.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ private PrologTerm readBlock(final Koi7CharOpMap endOperators) {
387387
// it is operator list
388388
// try to get the single operator from the list if the list
389389
// contains only one
390-
final Op readOperator = ((OpContainer) readAtom).getOperatorIfSingle();
390+
final Op readOperator = ((OpContainer) readAtom).getIfSingle();
391391

392392
// check that the operator is single
393393
if (readOperator == null) {
@@ -623,7 +623,12 @@ public Iterator<PrologTerm> iterator() {
623623
}
624624

625625
public Stream<PrologTerm> stream() {
626-
return StreamSupport.stream(Spliterators.spliteratorUnknownSize(this, Spliterator.ORDERED | Spliterator.IMMUTABLE | Spliterator.NONNULL), false);
626+
return StreamSupport.stream(
627+
Spliterators.spliteratorUnknownSize(
628+
this,
629+
Spliterator.ORDERED | Spliterator.IMMUTABLE | Spliterator.NONNULL),
630+
false
631+
);
627632
}
628633

629634
@Override

src/main/java/com/igormaznitsa/prologparser/tokenizer/Tokenizer.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -233,15 +233,13 @@ private void fixPosition() {
233233
}
234234

235235
private void skipUntilBlockCommentEnd() throws IOException {
236-
boolean star = false;
236+
boolean starCharDetected = false;
237237
while (!Thread.currentThread().isInterrupted()) {
238238
final int readChar = this.readChar();
239-
if (readChar < 0) {
240-
break;
241-
} else if (readChar == '/' && star) {
239+
if (readChar < 0 || readChar == '/' && starCharDetected) {
242240
break;
243241
} else {
244-
star = readChar == '*';
242+
starCharDetected = readChar == '*';
245243
}
246244
}
247245
}

src/main/java/com/igormaznitsa/prologparser/tokenizer/TreeItem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ PrologTerm convertToTermAndRelease() {
228228
Op operator = (Op) wrapper.getWrappedTerm();
229229
final PrologTerm blockContent = ((PrologStruct) rightTerm).getElementAt(0);
230230
if (blockContent.getTermType() == TermType.STRUCT) {
231-
final PrologTerm[] terms = ((PrologStruct) blockContent).fillElementsForComma(new ArrayList<>()).toArray(PrologParser.EMPTY_TERM_ARRAY);
231+
final PrologTerm[] terms = blockContent.flatComma(new ArrayList<>()).toArray(PrologParser.EMPTY_TERM_ARRAY);
232232
if (operator.getArity() == terms.length) {
233233
return new PrologStruct(operator, terms, wrapper.getLine(), wrapper.getPos());
234234
} else {

src/test/java/com/igormaznitsa/prologparser/tokenizer/OperatorContainerTest.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public void testOperatorContainer() {
6060
final Op operator = Op.make(100, OpAssoc.FX, "<>");
6161
final OpContainer container = make(operator);
6262
assertEquals(1, container.size());
63-
assertSame(operator, container.getOperatorIfSingle());
63+
assertSame(operator, container.getIfSingle());
6464
}
6565

6666
@Test
@@ -105,7 +105,7 @@ public void testRemoveAll() {
105105
assertTrue(container.add(operatorYF));
106106

107107
assertEquals(3, container.size());
108-
container.removeAll();
108+
container.clear();
109109
assertEquals(0, container.size());
110110
assertNull(container.findForType(OpAssoc.FX));
111111
assertNull(container.findForType(OpAssoc.XFX));
@@ -151,7 +151,7 @@ public void testSize() {
151151
final OpContainer container = make(operatorFX);
152152

153153
assertEquals(1, container.size());
154-
container.removeAll();
154+
container.clear();
155155
assertEquals(0, container.size());
156156
container.add(operatorFX);
157157
assertEquals(1, container.size());
@@ -169,16 +169,16 @@ public void testGetOperatorIfSingle() {
169169

170170
final OpContainer container = make(operatorFX);
171171

172-
assertSame(operatorFX, container.getOperatorIfSingle());
172+
assertSame(operatorFX, container.getIfSingle());
173173
container.add(operatorYF);
174-
assertNull(container.getOperatorIfSingle());
174+
assertNull(container.getIfSingle());
175175
container.add(operatorXFX);
176-
assertNull(container.getOperatorIfSingle());
177-
container.removeAll();
178-
assertNull(container.getOperatorIfSingle());
176+
assertNull(container.getIfSingle());
177+
container.clear();
178+
assertNull(container.getIfSingle());
179179

180180
container.add(operatorYF);
181-
assertEquals(operatorYF, container.getOperatorIfSingle());
181+
assertEquals(operatorYF, container.getIfSingle());
182182
}
183183

184184
@Test

0 commit comments

Comments
 (0)