Skip to content

Commit

Permalink
objectionary#1077 limit possible class names
Browse files Browse the repository at this point in the history
  • Loading branch information
mximp committed Sep 2, 2022
1 parent 8508dec commit 8d549da
Show file tree
Hide file tree
Showing 3 changed files with 203 additions and 11 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
+package org.eolang

[] > test
blah0 > @
[] > blah0
blah1 > @
[] > blah1
blah2 > @
[] > blah2
blah3 > @
[] > blah3
blah4 > @
[] > blah4
blah5 > @
[] > blah5
blah6 > @
[] > blah6
blah7 > @
[] > blah7
blah8 > @
[] > blah8
blah9 > @
[] > blah9
blah10 > @
[] > blah10
blah11 > @
[] > blah11
blah12 > @
[] > blah12
blah13 > @
[] > blah13
blah14 > @
[] > blah14
blah15 > @
[] > blah15
blah16 > @
[] > blah16
blah17 > @
[] > blah17
blah18 > @
[] > blah18
blah19 > @
[] > blah19
blah20 > @
[] > blah20
blah21 > @
[] > blah21
blah22 > @
[] > blah22
blah23 > @
[] > blah23
blah24 > @
[] > blah24
blah25 > @
[] > blah25
blah26 > @
[] > blah26
blah27 > @
[] > blah27
blah28 > @
[] > blah28
blah29 > @
[] > blah29
blah30 > @
[] > blah30
blah31 > @
[] > blah31
blah32 > @
[] > blah32
blah33 > @
[] > blah33
blah34 > @
[] > blah34
blah35 > @
[] > blah35
blah36 > @
[] > blah36
blah37 > @
[] > blah37
blah38 > @
[] > blah38
blah39 > @
[] > blah39
TRUE > @
36 changes: 25 additions & 11 deletions eo-maven-plugin/src/main/resources/org/eolang/maven/pre/to-java.xsl
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,14 @@ SOFTWARE.
<xsl:param name="n" as="xs:string"/>
<xsl:value-of select="concat('EO', replace(replace(replace(replace($n, '-', '_'), '@', '蠁'), '伪', '_'), '\$', '\$EO'))"/>
</xsl:function>
<xsl:function name="eo:suffix" as="xs:string">
<xsl:param name="s1"/>
<xsl:param name="s2"/>
<xsl:value-of select="concat(concat($s1, '_'), $s2)"/>
</xsl:function>
<xsl:function name="eo:class-name" as="xs:string">
<xsl:param name="n" as="xs:string"/>
<xsl:param name="alt" as="xs:string"/>
<xsl:variable name="parts" select="tokenize($n, '\.')"/>
<xsl:variable name="p">
<xsl:for-each select="$parts">
Expand All @@ -79,7 +85,15 @@ SOFTWARE.
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="concat($p, eo:clean($c))"/>
<xsl:variable name="pre" select="concat($p, eo:clean($c))"/>
<xsl:choose>
<xsl:when test="string-length($pre)&gt;250">
<xsl:value-of select="concat(substring($pre, 1, 25), $alt)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$pre"/>
</xsl:otherwise>
</xsl:choose>
</xsl:function>
<xsl:function name="eo:attr-name" as="xs:string">
<xsl:param name="n" as="xs:string"/>
Expand All @@ -99,10 +113,10 @@ SOFTWARE.
<xsl:attribute name="java-name">
<xsl:variable name="pkg" select="//metas/meta[head='package']/part[1]"/>
<xsl:if test="$pkg">
<xsl:value-of select="eo:class-name($pkg)"/>
<xsl:value-of select="eo:class-name($pkg, eo:suffix(../@line, ../@pos))"/>
<xsl:text>.</xsl:text>
</xsl:if>
<xsl:value-of select="eo:class-name(.)"/>
<xsl:value-of select="eo:class-name(., eo:suffix(../@line, ../@pos))"/>
</xsl:attribute>
</xsl:template>
<xsl:template match="class">
Expand Down Expand Up @@ -137,7 +151,7 @@ SOFTWARE.
<xsl:text>")</xsl:text>
<xsl:value-of select="eo:eol(0)"/>
<xsl:text>public final class </xsl:text>
<xsl:value-of select="eo:class-name(@name)"/>
<xsl:value-of select="eo:class-name(@name, eo:suffix(@line, @pos))"/>
<xsl:text> extends PhDefault {</xsl:text>
<xsl:value-of select="eo:eol(0)"/>
<xsl:apply-templates select="." mode="ctors"/>
Expand All @@ -161,19 +175,19 @@ SOFTWARE.
<xsl:choose>
<xsl:when test="//meta[head='junit'] and not(@parent)">
<xsl:text>public </xsl:text>
<xsl:value-of select="eo:class-name(@name)"/>
<xsl:value-of select="eo:class-name(@name, eo:suffix(@line, @pos))"/>
<xsl:text>() {</xsl:text>
</xsl:when>
<xsl:when test="@ancestors">
<xsl:text>public </xsl:text>
<xsl:value-of select="eo:class-name(@name)"/>
<xsl:value-of select="eo:class-name(@name, eo:suffix(@line, @pos))"/>
<xsl:text>(final Phi sigma) {</xsl:text>
<xsl:value-of select="eo:eol(2)"/>
<xsl:text>super(sigma);</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>public </xsl:text>
<xsl:value-of select="eo:class-name(@name)"/>
<xsl:value-of select="eo:class-name(@name, eo:suffix(@line, @pos))"/>
<xsl:text>(final Phi sigma) {</xsl:text>
<xsl:value-of select="eo:eol(2)"/>
<xsl:text>super(sigma);</xsl:text>
Expand Down Expand Up @@ -351,7 +365,7 @@ SOFTWARE.
<xsl:choose>
<xsl:when test="@primitive and @base">
<xsl:text>new </xsl:text>
<xsl:value-of select="eo:class-name(@base)"/>
<xsl:value-of select="eo:class-name(@base, eo:suffix(@line, @pos))"/>
<xsl:text>(Phi.桅)</xsl:text>
</xsl:when>
<xsl:when test="@base='$'">
Expand All @@ -371,7 +385,7 @@ SOFTWARE.
</xsl:when>
<xsl:when test="$b/@ancestors">
<xsl:text>new </xsl:text>
<xsl:value-of select="eo:class-name($b/@name)"/>
<xsl:value-of select="eo:class-name($b/@name, eo:suffix(@line, @pos))"/>
<xsl:text>(rho)</xsl:text>
</xsl:when>
<xsl:when test="$b and name($b)='class'">
Expand Down Expand Up @@ -604,7 +618,7 @@ SOFTWARE.
<xsl:param name="indent"/>
<xsl:value-of select="eo:tabs($indent)"/>
<xsl:text>Object obj = new Dataized(new </xsl:text>
<xsl:value-of select="eo:class-name(@name)"/>
<xsl:value-of select="eo:class-name(@name, eo:suffix(@line, @pos))"/>
<xsl:text>()).take();</xsl:text>
<xsl:value-of select="eo:eol(2 + $indent)"/>
<xsl:text>if (obj instanceof String) {</xsl:text>
Expand All @@ -619,7 +633,7 @@ SOFTWARE.
</xsl:template>
<xsl:template match="meta[head='package']" mode="head">
<xsl:text>package </xsl:text>
<xsl:value-of select="eo:class-name(tail)"/>
<xsl:value-of select="eo:class-name(tail, '')"/>
<xsl:text>;</xsl:text>
<xsl:value-of select="eo:eol(0)"/>
<xsl:value-of select="eo:eol(0)"/>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
xsls:
- /org/eolang/parser/add-default-package.xsl
- /org/eolang/parser/optimize/abstracts-float-up.xsl
- /org/eolang/maven/pre/classes.xsl
- /org/eolang/maven/pre/attrs.xsl
- /org/eolang/maven/pre/data.xsl
- /org/eolang/maven/pre/to-java.xsl
tests:
- /program/errors[count(*)=0]
- //java[contains(text(), 'public final class EOtest$EOblah0$EOblah1$EO59_58 extends PhDefault')]
- //java[contains(text(), 'public final class EOtest$EOblah0$EOblah1$EOblah2$EOblah3$EOblah4$EOblah5$EOblah6$EOblah7$EOblah8$EOblah9$EOblah10$EOblah11$EOblah12$EOblah13$EOblah14$EOblah15$EOblah16$EOblah17$EOblah18$EOblah19$EOblah20$EOblah21$EOblah22$EOblah23$EOblah24$EOblah25$EOblah26$EOblah27 extends PhDefault')]
eo: |
[] > test
blah0 > @
[] > blah0
blah1 > @
[] > blah1
blah2 > @
[] > blah2
blah3 > @
[] > blah3
blah4 > @
[] > blah4
blah5 > @
[] > blah5
blah6 > @
[] > blah6
blah7 > @
[] > blah7
blah8 > @
[] > blah8
blah9 > @
[] > blah9
blah10 > @
[] > blah10
blah11 > @
[] > blah11
blah12 > @
[] > blah12
blah13 > @
[] > blah13
blah14 > @
[] > blah14
blah15 > @
[] > blah15
blah16 > @
[] > blah16
blah17 > @
[] > blah17
blah18 > @
[] > blah18
blah19 > @
[] > blah19
blah20 > @
[] > blah20
blah21 > @
[] > blah21
blah22 > @
[] > blah22
blah23 > @
[] > blah23
blah24 > @
[] > blah24
blah25 > @
[] > blah25
blah26 > @
[] > blah26
blah27 > @
[] > blah27
blah28 > @
[] > blah28
blah29 > @
[] > blah29
blah30 > @
[] > blah30
blah31 > @
[] > blah31
blah32 > @
[] > blah32
blah33 > @
[] > blah33
blah34 > @
[] > blah34
blah35 > @
[] > blah35
blah36 > @
[] > blah36
blah37 > @
[] > blah37
blah38 > @
[] > blah38
blah39 > @
[] > blah39
TRUE > @

0 comments on commit 8d549da

Please sign in to comment.