Browse Source
Update `PropertyDescriptor.isParentTheSame` to consider the candidate as well as all super classes. Fixes gh-21626pull/31676/head
9 changed files with 304 additions and 10 deletions
@ -0,0 +1,61 @@
@@ -0,0 +1,61 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.configurationprocessor; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.boot.configurationprocessor.metadata.ConfigurationMetadata; |
||||
import org.springframework.boot.configurationprocessor.metadata.Metadata; |
||||
import org.springframework.boot.configurationsample.inheritance.ChildProperties; |
||||
import org.springframework.boot.configurationsample.inheritance.ChildPropertiesConfig; |
||||
import org.springframework.boot.configurationsample.inheritance.OverrideChildProperties; |
||||
import org.springframework.boot.configurationsample.inheritance.OverrideChildPropertiesConfig; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
class InheritanceMetadataGenerationTests extends AbstractMetadataGenerationTests { |
||||
|
||||
@Test |
||||
void childProperties() throws Exception { |
||||
ConfigurationMetadata metadata = compile(ChildPropertiesConfig.class); |
||||
assertThat(metadata).has(Metadata.withGroup("inheritance").fromSource(ChildPropertiesConfig.class)); |
||||
assertThat(metadata).has(Metadata.withGroup("inheritance.nest").fromSource(ChildProperties.class)); |
||||
assertThat(metadata).has(Metadata.withGroup("inheritance.child-nest").fromSource(ChildProperties.class)); |
||||
assertThat(metadata).has(Metadata.withProperty("inheritance.bool-value")); |
||||
assertThat(metadata).has(Metadata.withProperty("inheritance.int-value")); |
||||
assertThat(metadata).has(Metadata.withProperty("inheritance.long-value")); |
||||
assertThat(metadata).has(Metadata.withProperty("inheritance.nest.bool-value")); |
||||
assertThat(metadata).has(Metadata.withProperty("inheritance.nest.int-value")); |
||||
assertThat(metadata).has(Metadata.withProperty("inheritance.child-nest.bool-value")); |
||||
assertThat(metadata).has(Metadata.withProperty("inheritance.child-nest.int-value")); |
||||
} |
||||
|
||||
@Test |
||||
void overrideChildProperties() throws Exception { |
||||
ConfigurationMetadata metadata = compile(OverrideChildPropertiesConfig.class); |
||||
assertThat(metadata).has(Metadata.withGroup("inheritance").fromSource(OverrideChildPropertiesConfig.class)); |
||||
assertThat(metadata).has(Metadata.withGroup("inheritance.nest").fromSource(OverrideChildProperties.class)); |
||||
assertThat(metadata).has(Metadata.withProperty("inheritance.bool-value")); |
||||
assertThat(metadata).has(Metadata.withProperty("inheritance.int-value")); |
||||
assertThat(metadata).has(Metadata.withProperty("inheritance.long-value")); |
||||
assertThat(metadata).has(Metadata.withProperty("inheritance.nest.bool-value")); |
||||
assertThat(metadata).has(Metadata.withProperty("inheritance.nest.int-value")); |
||||
assertThat(metadata).has(Metadata.withProperty("inheritance.nest.long-value")); |
||||
|
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,71 @@
@@ -0,0 +1,71 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.configurationsample.inheritance; |
||||
|
||||
public class BaseProperties { |
||||
|
||||
private boolean boolValue; |
||||
|
||||
private int intValue; |
||||
|
||||
private final Nest nest = new Nest(); |
||||
|
||||
public boolean isBoolValue() { |
||||
return this.boolValue; |
||||
} |
||||
|
||||
public void setBoolValue(boolean boolValue) { |
||||
this.boolValue = boolValue; |
||||
} |
||||
|
||||
public int getIntValue() { |
||||
return this.intValue; |
||||
} |
||||
|
||||
public void setIntValue(int intValue) { |
||||
this.intValue = intValue; |
||||
} |
||||
|
||||
public Nest getNest() { |
||||
return this.nest; |
||||
} |
||||
|
||||
public static class Nest { |
||||
|
||||
private boolean boolValue; |
||||
|
||||
private int intValue; |
||||
|
||||
public boolean isBoolValue() { |
||||
return this.boolValue; |
||||
} |
||||
|
||||
public void setBoolValue(boolean boolValue) { |
||||
this.boolValue = boolValue; |
||||
} |
||||
|
||||
public int getIntValue() { |
||||
return this.intValue; |
||||
} |
||||
|
||||
public void setIntValue(int intValue) { |
||||
this.intValue = intValue; |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,61 @@
@@ -0,0 +1,61 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.configurationsample.inheritance; |
||||
|
||||
public class ChildProperties extends BaseProperties { |
||||
|
||||
private long longValue; |
||||
|
||||
private final NestInChild childNest = new NestInChild(); |
||||
|
||||
public long getLongValue() { |
||||
return this.longValue; |
||||
} |
||||
|
||||
public void setLongValue(long longValue) { |
||||
this.longValue = longValue; |
||||
} |
||||
|
||||
public NestInChild getChildNest() { |
||||
return this.childNest; |
||||
} |
||||
|
||||
public static class NestInChild { |
||||
|
||||
private boolean boolValue; |
||||
|
||||
private int intValue; |
||||
|
||||
public boolean isBoolValue() { |
||||
return this.boolValue; |
||||
} |
||||
|
||||
public void setBoolValue(boolean boolValue) { |
||||
this.boolValue = boolValue; |
||||
} |
||||
|
||||
public int getIntValue() { |
||||
return this.intValue; |
||||
} |
||||
|
||||
public void setIntValue(int intValue) { |
||||
this.intValue = intValue; |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.configurationsample.inheritance; |
||||
|
||||
import org.springframework.boot.configurationsample.ConfigurationProperties; |
||||
|
||||
public class ChildPropertiesConfig { |
||||
|
||||
@ConfigurationProperties(prefix = "inheritance") |
||||
public ChildProperties childConfig() { |
||||
return new ChildProperties(); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,36 @@
@@ -0,0 +1,36 @@
|
||||
package org.springframework.boot.configurationsample.inheritance; |
||||
|
||||
public class OverrideChildProperties extends BaseProperties { |
||||
|
||||
private long longValue; |
||||
|
||||
private final CustomNest nest = new CustomNest(); |
||||
|
||||
public long getLongValue() { |
||||
return this.longValue; |
||||
} |
||||
|
||||
public void setLongValue(long longValue) { |
||||
this.longValue = longValue; |
||||
} |
||||
|
||||
@Override |
||||
public CustomNest getNest() { |
||||
return this.nest; |
||||
} |
||||
|
||||
public static class CustomNest extends Nest { |
||||
|
||||
private long longValue; |
||||
|
||||
public long getLongValue() { |
||||
return this.longValue; |
||||
} |
||||
|
||||
public void setLongValue(long longValue) { |
||||
this.longValue = longValue; |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.configurationsample.inheritance; |
||||
|
||||
import org.springframework.boot.configurationsample.ConfigurationProperties; |
||||
|
||||
public class OverrideChildPropertiesConfig { |
||||
|
||||
@ConfigurationProperties(prefix = "inheritance") |
||||
public OverrideChildProperties overrideChildProperties() { |
||||
return new OverrideChildProperties(); |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue