SourceForTranslation.java 5.6 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
    class Universe { // Not referenced by lambda, so should not be captured.

        public String name;
        public int galaxiesCount;

        public Universe(String name, int galaxiesCount) {
            this.name = name;
            this.galaxiesCount = galaxiesCount;
        }

        public String toString() {
            return "Universe" + name + " of " + galaxiesCount + " galaxies";
        }

        class Galaxy {

            String name;
            private int starsCount;

            Galaxy(String name, int starsCount) {
                this.name = name;
                this.starsCount = starsCount;
            }

            public String toString() {
                return "galaxy " + name + " of " + starsCount + " solar systems";
            }

            int starsCount() {
                return starsCount;
            }

            private String name() {
                return name;
            }

            class SolarSystem {

                String name;
                int planetsCount;

                SolarSystem(String name, int planetsCount) {
                    this.name = name;
                    this.planetsCount = planetsCount;
                }

                public String toString() {
                    return "Solar System of " + name + " with " + planetsCount + " planets";
                }

                int planetsCount() {
                    return planetsCount;
                }

                SolarSystem copy(SolarSystem s) {
                    return s;
                }

                class Planet {

                    String name;
                    int moonsCount;

                    Planet(String name, int moonsCount, Runnable r) {
                        this.name = name;
                        this.moonsCount = moonsCount;
                        r.run();
                    }
                    Planet (String name, int moonsCount) {
                        this(name, moonsCount, ()-> {
                            String n = name;
                            StringBuffer buf = new StringBuffer();
                            buf.append("This planet belongs to the galaxy "
                                        + Galaxy.this.name + " with " + starsCount + " stars\n");
                            buf.append("This planet belongs to the galaxy "
                                        + Universe.Galaxy.this.name + " with " + starsCount() + " stars\n");
                            buf.append("This planet belongs to the galaxy "
                                        + Galaxy.this.name() + " with " + starsCount() + " stars\n");
                            buf.append("This planet belongs to the galaxy "
                                        + Universe.Galaxy.this.name() + " with "
                                        + (Universe.Galaxy.this).starsCount() + " stars\n");

                            buf.append("This planet belongs to the solar system "
                                        + SolarSystem.this.name + " with " + planetsCount + " planets\n");
                            buf.append("This planet belongs to the solar system "
                                        + Galaxy.SolarSystem.this.name + " with " + planetsCount() + " planets\n");
                            buf.append("This planet belongs to the solar system "
                                        + (SolarSystem.this).name + " with " + planetsCount + " planets\n");
                            buf.append("This planet belongs to the solar system "
                                        + Universe.Galaxy.SolarSystem.this.name + " with "
                                        + Universe.Galaxy.SolarSystem.this.planetsCount + " planets\n");
                            buf.append("This planet belongs to the solar system "
                                        + Universe.Galaxy.SolarSystem.this.name.toLowerCase().toUpperCase()
                                        + " with " + Universe.Galaxy.SolarSystem.this.planetsCount + " planets\n");
                            buf.append("This planet belongs to the solar system "
                                        + copy(Universe.Galaxy.SolarSystem.this).name.toLowerCase().toUpperCase()
                                        + " with " + Universe.Galaxy.SolarSystem.this.planetsCount + " planets\n");
                            if (!buf.toString().equals(output))
                                throw new AssertionError("Unexpected value\n" + buf);
                        });
                    }

                    static final String output =
                        "This planet belongs to the galaxy Mily way with 23456789 stars\n" +
                        "This planet belongs to the galaxy Mily way with 23456789 stars\n" +
                        "This planet belongs to the galaxy Mily way with 23456789 stars\n" +
                        "This planet belongs to the galaxy Mily way with 23456789 stars\n" +
                        "This planet belongs to the solar system Sun with 9 planets\n" +
                        "This planet belongs to the solar system Sun with 9 planets\n" +
                        "This planet belongs to the solar system Sun with 9 planets\n" +
                        "This planet belongs to the solar system Sun with 9 planets\n" +
                        "This planet belongs to the solar system SUN with 9 planets\n" +
                        "This planet belongs to the solar system SUN with 9 planets\n";


                    public String toString() {
                        return "Planet " + name + " with " + moonsCount + " moon(s)";
                    }
                }
            }
        }
    }