2013-03-30 3 views
0

을 가지고 내가 가지고있는 다음과 같은 구성 요소 :하게 IntelliJ IDEA 플러그인 지속성 상태 XML은 중복 라인

@State(
    name = "SessionConfiguration", 
    storages = { 
     @Storage(id = "default", file = StoragePathMacros.PROJECT_FILE), 
     @Storage(id = "dir", file = StoragePathMacros.PROJECT_CONFIG_DIR + "/tabsession.xml", scheme = StorageScheme.DIRECTORY_BASED) 
    } 
) 
public class SessionComponent implements ProjectComponent, PersistentStateComponent<Element> { 

... 

    @Nullable 
    @Override 
    public Element getState() { 
     LOG.debug("Saving state"); 

     final Element element = new Element("tabsession"); 

     // meta configuration information 
     final Element stateElement = new Element("state"); 
     stateElement.setAttribute("version", Integer.toString(STATE_VERSION)); 
     element.addContent(stateElement); 

     // session data 
     final Element sessionsElement = new Element("sessions"); 
     for(SessionState.Session session : sessionState.sessions) { 
      final Element sessionElement = new Element("session"); 
      sessionElement.setAttribute("name", session.name); 
      final Element filesElement = new Element("files"); 
      for(String path : session.files) { 
       final Element fileElement = new Element("file"); 
       fileElement.setAttribute("path", path); 
       filesElement.addContent(fileElement); 
      } 
      filesElement.setAttribute("focusedFile", session.focusedFile); 
      sessionElement.addContent(filesElement); 
      sessionsElement.addContent(sessionElement); 
     } 
     element.addContent(sessionsElement); 

     return element; 
    } 

... 

} 

잘 작동하고 생성 대상 파일 tabsession.xml 것 :

<?xml version="1.0" encoding="UTF-8"?> 
<project version="4"> 
    <component name="SessionConfiguration"> 
    <state version="1" /> 
    <sessions> 
     <session name="first"> 
     <files focusedFile="$PROJECT_DIR$/src/First.java"> 
      <file path="$PROJECT_DIR$/src/First.java" /> 
      <file path="$PROJECT_DIR$/src/Second.java" /> 
     </files> 
     </session> 
    </sessions> 
    </component> 
</project> 

을하지만 상태가 다시 저장됩니다 경우 다른 데이터를 사용하면 이전 행이 제거되지 않습니다. 내가 다른 파일을 열고 상태가 저장됩니다 예를 들어, XML은 다음과 같습니다 : 분명히 잘못

<?xml version="1.0" encoding="UTF-8"?> 
<project version="4"> 
    <component name="SessionConfiguration"> 
    <state version="1" /> 
    <sessions> 
     <session name="first"> 
     <files focusedFile="$PROJECT_DIR$/src/First.java"> 
      <file path="$PROJECT_DIR$/src/First.java" /> 
      <file path="$PROJECT_DIR$/src/Second.java" /> 
      <file path="$PROJECT_DIR$/src/First.java" /> 
      <file path="$PROJECT_DIR$/src/Second.java" /> 
      <file path="$PROJECT_DIR$/src/Third.java" /> 
     </files> 
     </session> 
    </sessions> 
    </component> 
</project> 

합니다. 오래된 아이디어를 제거하면서 현재 상태 만 저장할 수있는 아이디어는 없습니까?

답변

0

나는이 문제가 session.files 배열을 만드는 내 코드라는 것을 알아 냈습니다. 나는 중복을 확인하지 않았다. 그 일을 한 후에 모든 것이 예상대로 일했습니다.

관련 문제